打印不同三元组的方法

时间:2014-09-30 19:26:13

标签: java algorithm

你好我是一个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]));

有人可以帮我吗? 非常感谢你。

2 个答案:

答案 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