当前位置: 首页 > news >正文

LeetCode 2894. 分类求和并作差【数学,容斥原理】1140

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。

为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库:https://github.com/memcpy0/LeetCode-Conquest。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等,还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解,还可以一同分享给他人。

由于本系列文章的内容随时可能发生更新变动,欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。

给你两个正整数 n 和 m 。

现定义两个整数 num1 和 num2 ,如下所示:

  • num1:范围 [1, n] 内所有 无法被 m 整除 的整数之和。
  • num2:范围 [1, n] 内所有 能够被 m 整除 的整数之和。

返回整数 num1 - num2 。

示例 1:

输入:n = 10, m = 3
输出:19
解释:在这个示例中:
- 范围 [1, 10] 内无法被 3 整除的整数为 [1,2,4,5,7,8,10] ,num1 = 这些整数之和 = 37- 范围 [1, 10] 内能够被 3 整除的整数为 [3,6,9] ,num2 = 这些整数之和 = 18 。
返回 37 - 18 = 19 作为答案。

示例 2:

输入:n = 5, m = 6
输出:15
解释:在这个示例中:
- 范围 [1, 5] 内无法被 6 整除的整数为 [1,2,3,4,5] ,num1 = 这些整数之和 =  15- 范围 [1, 5] 内能够被 6 整除的整数为 [] ,num2 = 这些整数之和 = 0 。
返回 15 - 0 = 15 作为答案。

示例 3:

输入:n = 5, m = 1
输出:-15
解释:在这个示例中:
- 范围 [1, 5] 内无法被 1 整除的整数为 [] ,num1 = 这些整数之和 = 0- 范围 [1, 5] 内能够被 1 整除的整数为 [1,2,3,4,5] ,num2 = 这些整数之和 = 15 。
返回 0 - 15 = -15 作为答案。

提示:

  • 1 <= n, m <= 1000

解法 容斥原理

k = ⌊ n m ⌋ k = \left\lfloor\dfrac{n}{m}\right\rfloor k=mn num 2 \textit{num}_2 num2 [ 1 , n ] [1,n] [1,n] 内的 m m m 的倍数之和,即
m + 2 m + ⋯ + k m = ( 1 + 2 + ⋯ + k ) ⋅ m = k ( k + 1 ) 2 ⋅ m \begin{aligned} &m + 2m + \cdots + km\\ =\ & (1+2+\cdots+k)\cdot m\\ =\ & \dfrac{k(k+1)}{2}\cdot m \end{aligned} = = m+2m++km(1+2++k)m2k(k+1)m
num 1 \textit{num}_1 num1 相当于 ( 1 + 2 + ⋯ + n ) − num 2 (1+2+\cdots+n) - \textit{num}_2 (1+2++n)num2
​所以
num 1 − num 2 = ( 1 + 2 + ⋯ + n ) − num 2 ⋅ 2 = n ( n + 1 ) 2 − k ( k + 1 ) m \begin{aligned} &\textit{num}_1 - \textit{num}_2\\ =\ & (1+2+\cdots+n) - \textit{num}_2 \cdot 2\\ =\ & \dfrac{n(n+1)}{2} - k(k+1)m \end{aligned} = = num1num2(1+2++n)num222n(n+1)k(k+1)m

class Solution {
public:int differenceOfSums(int n, int m) {return n * (n + 1) / 2 - n / m * (n / m + 1) * m;}
};

复杂度分析:

  • 时间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
  • 空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
http://www.lryc.cn/news/198335.html

相关文章:

  • 100天掌握网络安全知识点!
  • 【ArcGIS绘图系列1】在ArcGIS中制作柱状图与饼状图
  • 【c++】跟webrtc学std array 1: 混音的多维数组
  • App出海起量难?传参安装打开获客增长新途径
  • 当AI遇上3D建模:一场创意与技术的完美碰撞!
  • 工作中的有效沟通
  • 1.集合框架
  • 2023年下半年软考考试重磅消息
  • Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能
  • 九月 Web3 游戏报告:数量增长,巨头入场,用户获取和留存仍存挑战
  • Scala语言入门
  • MyBatisPlus-02
  • vscode中快速生成vue3模板
  • Liunx C运算符
  • 【反射】Class类
  • PyQt 问题记录
  • 云安全—责任共担
  • 使用Vscode终端设置window环境变量设置不上
  • 【微信小程序】自定义组件布局会议OA其他页面(附源码)
  • 如何使用 MiniGPT-v2
  • python -pandas -处理excel合并单元格问题
  • KT6368A的封装怎么画 原理图怎么画 资料怎么看 怎么下载呢
  • Linux杀掉僵尸进程方法
  • uniapp(uncloud) 使用生态开发接口详情1(创建项目)
  • Linux内核8. Linux内核的经典调试方式
  • react中如何对props传的参数进行必要的限制
  • Jmeter —— 接口之间关联调用(获取上一个接口的返回值作为下一个接口的请求参数)
  • Python 机器学习入门之K-Means聚类算法
  • 【jmeter】接口测试流程
  • RTOS(6)任务管理