你好我是一个Java菜鸟,我无法理解这段代码。
以下是代码:
//print distinct triples (i, j, k) such that a[i] + a[j] + a[k] = 0
public static void printAll(int[] a) {
int N = a.length;
Arrays.sort(a);
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
int k = Arrays.binarySearch(a, -(a[i] + a[j]));
if (k > j) StdOut.println(a[i] + " " + a[j] + " " + a[k]);
}
}
}
我不明白这一行
int k = Arrays.binarySearch(a, -(a[i] + a[j]));
有人可以帮我吗? 非常感谢你。
答案 0 :(得分:1)
[...]令我困惑的是,为什么在这里使用
-(a[i]+a[j])
。
他们会查找此值,因为这是唯一可以使i + j + k = 0
:
鉴于
a[i] + a[j] + a[k] = 0
然后求解a[k]
给出:
a[k] = -(a[i] + a[j])
答案 1 :(得分:0)
binarySearch方法在第一个参数中提供的数组中搜索第二个参数的位置(在本例中为 - (a [i] + a [j]))。必须对数组进行排序。例如:
int[] ia = [ 2, 4, 6, 8, 10 ];
int i = Arrays.binarySearch(ia, 6);
// i == 2, since ia[2] = 6