public class twoSumProblem {
public static int bruteForce(Integer[] a) {
int count = 0;
for (int i = 0; i < a.length; i++)
for (int j = i+1; j < a.length; j++) if (a[i] + a[j] == 0) count++;
return count;
}
我如何为此代码提出更好的算法?我还需要他们的运行时间复杂性。请帮帮我。
答案 0 :(得分:1)
对阵列进行排序可以获得控制仅低于或等于零的数字的优势。 实际上,考虑到有序数组的第i个元素,你有三种情况
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
把 n = a.lenght ,订购过程需要O(n * log n),所以:
最糟糕的情况:O(n * log(n)) 搜索对需要复杂度O(n)。这种情况对应于数组仅由负值组成的情况。
MID CASE:O(n * log(n)) 中间案例具有渐近相同的复杂性,但由于存在正数,所探索的值将小于n。
更好的情况Θ(n * log(n) 当数组只有正元素时会发生这种情况,所以没有匹配,搜索过程立即终止。因此,复杂性仅取决于订购流程。