我想实现与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;
}
答案 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},