【发布时间】:2019-12-03 19:01:18
【问题描述】:
int[] a = {3,5,4,3,2,2,1};
System.out.println("Duplicate elements are: ");
for(int i=0; i<a.length; i++) {
for(int j = i+1; j<a.length; j++) {
if(a[i]==a[j] && i!=j){
System.out.println(a[j] + " ");
}
}
}
这段代码时间复杂度是O(n^2),面试官让我把它改成O(n)。我们该怎么做?
【问题讨论】:
-
这里应该做什么:
//do something in constant time?两个循环都从zero增加到n。为什么你甚至需要内循环? -
在不知道嵌套循环内的内容的情况下是不可能做到的。最后可能变成 O(1),可能是 O(n),也可能是 O(n²)。
-
好吧,如果某事是例如用值填充矩阵,例如
m[i][j] = i*j,那么这是不可能的 -
我已经更新了我的问题中的代码。这是完全相同的问题。您现在能详细说明一下吗?
-
@RyanWilson 现在检查代码的更新版本。你现在能告诉我我们该怎么做吗?
标签: java algorithm loops data-structures time-complexity