gpt4 book ai didi

java - 区间和的时间复杂度

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:34 25 4
gpt4 key购买 nike

我试图了解算法的时间复杂度并遇到了这个问题。问题是计算区间和(0 <= k <= length_of_list)。

public static void main(String args[]){
LinkedList<Integer> l=new LinkedList<Integer>();
l.add(4);
l.add(2);
l.add(3);
l.add(1);
l.add(5);

int k=2;

List result = new ArrayList();
int n = l.size();

for(int i = 0; i < n; i++){
if(i >= k-1){
int sum = 0;
for(int j = i; j >= i-k+1; j--){
sum += in.get(j);
}
result.add(sum);
}
}
System.out.println(result);
}

谁能解释一下上面代码的时间复杂度?是n*k还是n^2(因为k的最大值是n)。 if 条件会影响时间复杂度吗?

最佳答案

由于 if 被执行了这么多次,内部循环执行了 O(n-k) 次,即 O(n)。
内部循环是 O(k) - 它迭代了多少次。

那么整个算法就是 O(n) * O(k) = O(n * k)。

您可以说它是 O((n - k) * k),但对于 k << n,这与 O(n * k) 相同。

对于 k 在大小上接近 n 的边缘情况,复杂度为 O(n),因为 if 为真 O(1) 次,而内部循环为 O (k),对于 k ~ n 来说是 O(n),所以总体上是 O(n)。

关于java - 区间和的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42216555/

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