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

白银市建设管理处网站公司网站维护教程

白银市建设管理处网站,公司网站维护教程,网站开发 技术难点,柳南网站建设目录 题目链接:2894. 分类求和并作差 - 力扣(LeetCode) 题目描述 解法一:遍历求解 Java写法: C写法: 运行时间 时间复杂度和空间复杂度 解法二:数学优化法 Java写法: C写法…

目录

题目链接:2894. 分类求和并作差 - 力扣(LeetCode)

题目描述

解法一:遍历求解

Java写法:

C++写法:

运行时间

时间复杂度和空间复杂度

解法二:数学优化法

Java写法:

C++写法:

运行时间

时间复杂度和空间复杂度

总结


题目链接:2894. 分类求和并作差 - 力扣(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

解法一:遍历求解

        常规遍历解法的核心就是通过循环遍历区间内的所有整数,根据是否能被 m 整除进行分类累加。具体步骤如下:

  1. ​初始化累加器​​:定义两个变量 num1 和 num2,分别用于累加无法被 m 整除和能够被 m 整除的整数之和。
  2. ​循环遍历​​:对区间 [1, n] 内的每个整数 i 进行遍历,利用条件判断 i % m != 0 将数值分类累加到 num1 或 num2 中。
  3. ​结果计算​​:最终返回 num1 - num2 的差值。

        这个方法的优势就在于逻辑比较直观,非常易于实现,不过时间复杂度为 O(n),当 n 较大时效率较低。

Java写法:

public class Solution {public int differenceOfSums(int n, int m) {int num1 = 0, num2 = 0;for (int i = 1; i <= n; i++) {if (i % m != 0) num1 += i;else num2 += i;}return num1 - num2;}
}

C++写法:

class Solution {
public:int differenceOfSums(int n, int m) {int num1 = 0, num2 = 0;for (int i = 1; i <= n; i++) {(i % m != 0) ? num1 += i : num2 += i;}return num1 - num2;}
};

运行时间

时间复杂度和空间复杂度

​方法​​时间复杂度​​适用场景​​核心思想​
常规遍历法O(n)小规模数据或调试条件判断与累加
数学优化法O(1)大规模数据或高效计算等差数列求和与整体映射关系



解法二:数学优化法

数学优化解法就是通过公式直接计算结果,避免了遍历操作。其核心步骤如下:

  1. ​总和计算​​:区间 [1, n] 所有整数之和为 S = n*(n+1)/2
  2. ​可被 m 整除的数列​​:这些数构成等差数列 m, 2m, 3m, ..., km(其中 k = n/m 取整),其和为 num2 = m * k*(k+1)/2
  3. ​结果公式推导​​:无法被 m 整除的数和为 S - num2,因此所求差值为 (S - num2) - num2 = S - 2*num2

        这个方法的时间复杂度为 O(1),效率远远高于常规遍历法,尤其适用于大范围数据。

Java写法:

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

C++写法:

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

运行时间

时间复杂度和空间复杂度

​方法​​时间复杂度​​适用场景​​核心思想​
常规遍历法O(n)小规模数据或调试条件判断与累加
数学优化法O(1)大规模数据或高效计算等差数列求和与整体映射关系

总结

        本文介绍了两种计算区间[1,n]内整数基于能否被m整除的分类差值方法。常规遍历法通过循环判断累加,时间复杂度O(n),易于实现但效率较低。数学优化法则利用等差数列求和公式直接计算结果,时间复杂度降至O(1),特别适合大规模数据处理。两种方法分别适用于不同场景:遍历法适合小规模数据调试,数学方法更适合高效计算需求。两种解法均提供了Java和C++的实现代码示例。

http://www.dtcms.com/wzjs/791796.html

相关文章:

  • 汕头网站排名优化报价福州网站开发公司
  • 行业门户网站营销案例北京建设工程交易网站官网
  • 公司网站怎么做百度竞价北京计算机编程培训学校
  • 昆山网站制作哪家强做一手房有哪些网站比较好啊
  • 建站服务论坛金融投资网站 php源码
  • 摄像头做直播网站杭州上城区抖音seo渠道
  • 企业网站建设费是无形资产吗查工程建设不良记录免费的网站
  • 济宁北湖建设集团网站如何上传网页到网站
  • 兰州新区建设银行网站专业app开发设计的公司
  • 南阳网站建设网站建设什么打王思聪
  • 二维码制作网站链接给个网站2022年手机上能用的
  • 做竞价的网站怎么编辑网页
  • 果洛州商城网站建设湖南公司响应式网站建设价位
  • 宠物网站建设进度表建设网站的个人心得体会
  • 网站域名怎样注销长春建站网站
  • 网站模板商城创意logo一键生成器软件免费
  • 网站建设 网站邢台专业网站建设公司
  • 福建建设注册管理中心网站站开发技术培训
  • 精选赣州网站建设wordpress qq登录
  • wordpress 做一个视频站企业解决方案英文
  • cms三合一网站源码做羽毛球网站
  • 做外贸必应网站产品曝光社区app网站模板下载
  • 制作平台网站费用logo免费生成网站
  • 怎么使用织梦做网站户外平台设计
  • 怀化物流网站建设报价wordpress 国外空间
  • 建设网站的优点跟缺点权威迷失传奇新开网站
  • 景区网站建设的重要性教育机构网站
  • 城乡住房和城乡建设网站查询域名防红短链接
  • 北京企业官网网站建设南康区建设局网站
  • vs怎么做网站wordpress 上传文件