【发布时间】:2021-10-23 00:57:33
【问题描述】:
我目前需要编写一个程序来进行成对比较以在 int 列表中找到匹配的对,但我能想到的唯一方法是通过嵌套的 for 循环。有没有办法使时间复杂度 O(n) 而不是嵌套 for 循环的 O(n^2)?
int[] arr = new int[n];
int total = 0;
for (int i=0; i<n; i++){
for (int j=i+1; j<n; j++){
if (arr[i] == arr[j]){
total++;
}
}
}
【问题讨论】:
-
您可以从
j=i+1开始,您不会将每个弓与其本身进行比较,并且即使所有弓都不同,也至少有n对 -
哦,谢谢!编辑了那部分
-
您的问题是关于时间复杂度的,但您用 memory 高效标记了它。是不是搞错了?
-
列表中没有固定的数字。我已经编辑了时间复杂度,谢谢!
-
不确定我得到代码的作用,例如,如果数组中充满了单个数字,让我们说所有元素都等于 1,让我们说数组长度为 5,那么总长度为 10 是什么你在找还是应该是 5 ?
标签: java arrays loops time-complexity