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

LeetCode 2894.分类求和并作差:数学O(1)一行解决

【LetMeFly】2894.分类求和并作差:数学O(1)一行解决

力扣题目链接:https://leetcode.cn/problems/divisible-and-non-divisible-sums-difference/

给你两个正整数 nm

现定义两个整数 num1num2 ,如下所示:

  • 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

解题方法:数学

这就需要拿出我们小学二年级就学过的等差数列求和公式 ⌊ ( 首项 + 尾项 ) × 项数 2 ⌋ \lfloor\frac{(首项+尾项)\times 项数}{2}\rfloor 2(首项+尾项)×项数

另外有 n u m 1 − n u m 2 = ( n u m 1 + n u m 2 ) − n u m 2 num1-num2=(num1+num2)-num2 num1num2=(num1+num2)num2,而 n u m 1 + n u m 2 num1+num2 num1+num2就是整个数列 1 1 1 n n n的和, n u m s 2 nums2 nums2就是首项为 m m m尾项为 ⌊ n m ⌋ × m \lfloor\frac{n}m\rfloor\times m mn×m项数为 ⌊ n m ⌋ \lfloor\frac{n}m\rfloor mn的等差数列。

  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-05-27 21:42:21* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-05-27 21:53:29*/
class Solution {
public:int differenceOfSums(int n, int m) {return (1 + n) * n / 2 - (m + n / m * m) * (n / m);}
};
Python
'''
Author: LetMeFly
Date: 2025-05-27 21:42:21
LastEditors: LetMeFly.xyz
LastEditTime: 2025-05-27 21:54:46
'''
class Solution:def differenceOfSums(self, n: int, m: int) -> int:return (1 + n) * n // 2 - (m + n // m * m) * (n // m)
Java
/** @Author: LetMeFly* @Date: 2025-05-27 21:42:21* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-05-27 21:57:48*/
class Solution {public int differenceOfSums(int n, int m) {return (1 + n) * n / 2 - (m + n / m * m) * (n / m);}
}
Go
/** @Author: LetMeFly* @Date: 2025-05-27 21:42:21* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-05-27 21:58:33*/
package mainfunc differenceOfSums(n int, m int) int {return (1 + n) * n / 2 - (m + n / m * m) * (n / m)
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关文章:

  • 大语言模型 21 - MCP 自动操作 Figma+Cursor 实现自动原型开发!
  • 利用 MkDocs 和 GitHub 部署个人博客网页
  • 基于 SpringBoot 与 VueJS 的智慧就业服务平台构建:技术融合与实践创新
  • AI赋能引爆短剧全球化风潮,腾讯云媒体处理助力短剧平台出海吸金
  • proteus8.4 安装包下载地址与安装教程
  • Web通信协议全景解析:从HTTP到WebService的技术演进与对比
  • NGINX HTTP/2 全面指南开启、调优与实战
  • Windows版本的postgres安装插件http
  • 恶意npm与VS Code包窃取数据及加密货币资产
  • FastMoss 国际电商Tiktok数据分析 JS 逆向 | MD5加密
  • Pytorch
  • [25-cv-05718]BSF律所代理潮流品牌KAWS公仔(商标+版权)
  • Springboot引入Spring Cloud for AWS的配置中心(Parameter Store和Secrets)
  • 使用redis代替session的登录校验
  • 语音合成之十七 语音合成(TTS)中文自然度:问题、成因、解决方案
  • 关于 Web 安全:6. 常见 CMS 开源系统风险点
  • 2.3 TypeScript 非空断言操作符(后缀 !)详解
  • WIN10 安装dify ollama搭建工作流agent
  • 更新时间相差8个小时
  • 如何创建一个流程图/思维导图
  • 网页制作与网站建设的题/app软件推广平台
  • 网站专题页优化/seo短视频
  • 国外独立站建站/windows优化大师是什么
  • python做网站难么/91手机用哪个浏览器
  • 网站建设群/app拉新推广代理
  • 网站源码授权/网络推广专员岗位职责