我在下面有一些嵌套的while循环代码。我认为外部while循环的复杂性,但我不确定如何为内部循环,因为它有&&
。有人可以向我解释如何确定内循环的复杂性吗?
int result = 0;
int i = 0;
while (i < n / 2){ // O(log N)
result += arr[i];
i += 1;
while (i >= n / 2 && i < n){ //Not sure how the parameters change it. O(log N) ?
result += arr[i];
i += 1;
}
}
printf("%d\n", result);
答案 0 :(得分:4)
外循环递增直到i =(n / 2)-1。下一个i + = 1将其置于i = n / 2然后内循环运行直到i = n。外部循环不会进行另一次迭代。
以下内容相同。
while (i < n / 2){
result += arr[i];
i += 1;
}
// i = n / 2
while (i < n){
result += arr[i];
i += 1;
}
O(n)+ O(n)= O(n)
答案 1 :(得分:2)
这是编写代码的另一种方式:
int result = 0;
int i = 0;
while (i < n) {
result += arr[i++];
}
printf("%d\n", result);
所以它显然是O(n)或线性时间。