所以,我知道我的想法是错误的,但我对所有三段代码的回答是它们的复杂度是 O(n^2)。
谁能告诉我我是否错了?
如果是的话,你能帮我想想如何解决类似的问题吗?预先感谢您!
public static int firstLoop(int[] arr) {
int sum = 0; int n = arr.length;
int limit = n * n;
for ( int j = 0; j < limit; j += 2 ) {
sum = (sum + arr[j / n] ) % 100;
}
return sum; }
public static int withLoop(int[] arr) {
int sum = 0; int n = arr.length;
int j = 1;
int limit = n * n;
for ( j= limit - 1; j > 0; j /= 2 ) {
sum = (sum + arr[j / n] ) % 100; }
return sum; }
public static int fwLoop(int[] arr)
{ int sum = 0;
int n = arr.length;
int limit = n * n;
for ( int k = 0; k < limit; k += 2 ) {
int t = 1; for ( j = limit - 1; j > 0; j /= 2 ) {
t = (t + arr[j / n] ) % 100;
} sum = (sum + t + arr[k / n] ) % 200;
} return sum;
}
最佳答案
正如您所说,第一段代码的运行时间为
O(n^2)
,因为limit
的大小为n^2
第二个执行
j/=2
,每次将limit
的长度除以2
,因此循环将运行k次,其中k=log(n^2) = 2log(n)
,因此它的顺序是O(log(n))
第三个是第一个和第二个的组合,它的运行时间为
O((n^2)*log(n))
时间
关于java - 解释大 O 循环和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579672/