gpt4 book ai didi

java - 减少时间复杂度/优化解决方案

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:20 26 4
gpt4 key购买 nike

座右铭是找到N以下3或5的所有倍数的和。

这是我的代码:

public class Solution
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int t = in.nextInt();
long n=0;
long sum=0;

for(int a0 = 0; a0 < t; a0++)
{
n = in.nextInt();
sum=0;
for(long i=1;i<n;i++)
{
if(i%3==0 || i%5==0)

sum = sum + i;
}
System.out.println(sum);
}
}
}


对于某些测试用例,要花费超过1秒的时间。谁能帮助我,以减少时间的复杂性?

最佳答案

我们可以找到小于d的所有数字N的倍数之和作为算术级数的总和(它们的总和等于d + 2*d + 3*d + ...)。

long multiplesSum(long N, long d) {
long highestMultiple = (N-1) / d * d;
long numberOfMultiples = highestMultiple / d;
return (d + highestMultiple) * numberOfMultiples / 2;
}


那么结果将等于:

long resultSum(long N) {
return multiplesSum(N, 3) + multiplesSum(N, 5) - multiplesSum(N, 3*5);
}


我们需要减去 multiplesSum(N, 15),因为有些数字是 35的倍数,所以我们将它们相加了两次。

复杂度:O(1)

关于java - 减少时间复杂度/优化解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45515015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com