(LeetCode 每日一题)2894. 分类求和并作差(数组、数学)
题目:2894. 分类求和并作差
方法一:遍历,时间复杂度0(n)。
C++版本:
class Solution {
public:int differenceOfSums(int n, int m) {int sum=0;for(int i=1;i<=n;i++){if(i%m==0) sum-=i;else sum+=i;}return sum;}
};
JAVA版本:
class Solution {public int differenceOfSums(int n, int m) {int sum=0;for(int i=1;i<=n;i++){if(i%m==0) sum-=i;else sum+=i;}return sum;}
}
Go版本:
func differenceOfSums(n int, m int) int {sum:=0for i:=1;i<=n;i++ {if i%m==0 {sum-=i}else {sum+=i}}return sum
}
方法二:数学,时间复杂度0(1)。
图片来源
C++版本:
class Solution {
public:int differenceOfSums(int n, int m) {int k=n/m;int num2=(1+k)*k/2*m;int num1=(1+n)*n/2-num2;return num1-num2;}
};
JAVA版本:
class Solution {public int differenceOfSums(int n, int m) {int k=n/m;int num2=(1+k)*k/2*m;int num1=(1+n)*n/2-num2;return num1-num2;}
}
Go版本:
func differenceOfSums(n int, m int) int {k:=n/m;num2:=(1+k)*k/2*m;num1:=(1+n)*n/2-num2;return num1-num2;
}