我需要帮助弄清楚为什么 Java 中的以下代码片段是 O(nlogn) 而不是 O(n^2)。请问有什么帮助吗?
int sumSome(int[] arr){
int sum = 0;
for (int i=0; i<arr.length; i++) {
for (int j=1; j<arr.length; j = j*2) {
if (arr[i] > arr[j])
sum += arr[i];
}
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
考虑一个通用的数字区间可能会有所帮助,比如1 到 100。
但是,如果每次通过 loop 时循环步长的大小都发生变化,则会得到不同的结果:
所以在你的例子中,你的外循环 O(n) 乘以你的内循环 O(log n),导致组合 O(n * log n)。
在这个答案中可以找到不同时间复杂度的很好的例子。
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |