1
我在嘗試理解算法的時間複雜性並發現了這個問題。問題是計算區間和(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)。條件是否會影響時間複雜性?
謝謝。這幫了我很多。 – user1092
這是否意味着,最好的情況是O(n)(對於k〜n),最壞的情況是O(n * k)(對於k << n)。 – user1092
@ user1092:你的代碼是O(n * k),但是存在純粹的O(n)解決方案而不考慮k值。 – algojava