【发布时间】:2022-01-20 13:26:26
【问题描述】:
我正在练习 Codility。有一个简单级别的问题,但我被困在性能上。测试结果分析将此代码标记为O(N**2),但显然没有任何嵌套循环。谁能告诉我为什么我的代码是 O(N**2)?
public static int solution(int X, int[] A) {
List<Integer> temp = new ArrayList<>();
for (int i = 1; i <= X; i++ ){
temp.add(i);
}
int counter = 0;
int res = -1;
for (int i: A){
if (temp.contains(i)) {
temp.remove(new Integer(i));
}
if (temp.size() == 0){
res= counter;
break;
}
counter++;
}
if (temp.size() != 0){
res = -1;
}
return res;
}
【问题讨论】:
-
您可能需要检查documentation for
ArrayList:“[add除外,所有其他操作都以线性时间运行(粗略地说)”您已致电contains和remove在循环中。 -
我认为这是由于使用了
remove和contains。在最坏的情况下,它们将花费整个数组的遍历。
标签: java time-complexity