将K-互补对阵列的效率提高到O(NlogN)

时间:2017-01-22 17:53:07

标签: java arrays string algorithm sorting

我想实现与O(NlogN)匹配的K-互补整数数组的有效方法。下面是我的代码,它不起作用。任何人都可以帮我解决这个问题。我已经尝试过,但不能自己解决

public static StringBuffer newFunction(int arr[], int k) {
    Arrays.sort(arr);
    int result = 0;
    StringBuffer sb = new StringBuffer();
    int j = arr.length - 1;
    int i = 0;
    while (i <= j) {
        if (arr[i] + arr[j] == k) {
            sb.append("{" + arr[i] + "," + arr[j] + "}" + ", ");
            result++;
        } else if ((arr[i] + arr[j]) < k) {
            i++;
        } else {
            j--;
        }
    }

    System.out.println(result);
    return sb;
}

1 个答案:

答案 0 :(得分:1)

你错过了增量&amp;当你找到一对时减少指数。相关代码修改如下:

while (i <= j) {
    if (arr[i] + arr[j] == k) {
        sb.append("{" + arr[i] + "," + arr[j] + "}" + ", ");
        result++;
        i++; // increment
        j--; // decrement
    } else if ((arr[i] + arr[j]) < k) {
        i++;
    } else {
        j--;
    }
}

通过这种修改它应该起作用:

int myArray[] = {8,5,7,10,2,13,11,4,9,6,1,3};
System.out.println(newFunction(myArray, 15));
// 5
// {2,13}, {4,11}, {5,10}, {6,9}, {7,8},