【发布时间】:2017-02-15 20:18:12
【问题描述】:
我看过很多关于Big-O的问题,但我不太明白这个。
我在练习一些面试问题时遇到了一个问题,我必须找出一个毕达哥拉斯三元组是否存在于整数数组中。 我发现有一个简单的 O(n^3) 方法来解决它,但我想找到一种更快的方法。
我的问题是,下面的代码是 O(n^2) 还是 O(n^3)? 我很困惑,因为即使我只有 2 个循环,在最坏的情况下我也需要经历 n 次 n^2,这将是 O(n^3)。
public boolean findTriple(int[] array) {
return findT(0, array);
}
public boolean findT(int start, array) {
if(start == array.length-1) {
return false;
}
int first = array[start];
for(int i = 0; i < array.length; i++) {
for(int j = i+1; j < array.length; j++) {
if(first*first == array[i]*array[i] + array[j]*array[j] ||
array[i]*array[i] == array[j]*array[j] + first*first ||
array[j]*array[j] == first*first + array[i]*array[i]) {
return true;
}
}
}
return findT(start+1, array);
}
【问题讨论】:
标签: c recursion time-complexity big-o