一个按升序排列好的数组int[] array = {-5,-1,0,5,9,11,13,15,22,35,46},输入一个x,int x = 31,在数据中找出和为x的两个数,例如 9 + 22 = 31,要求算法的时间复杂度为O(n);
要求时间复杂度为O(n),而且是要求找出和为x而不是所有的和为x。
所以要求只遍历一遍array,两个index,从两头遍历,如果和大于target,则index2--,否则index1++;
public int[] getSum(int[] array, int target) {
int length = array.length;
int[] result = new int[2];
int headIndex = 0;
int tailIndex = length - 1;
while (array[headIndex] + array[tailIndex] != target) {
if (array[headIndex] + array[tailIndex] < target) {
headIndex++;
} else if (array[headIndex] + array[tailIndex] > target) {
tailIndex--;
}
result[0] = array[headIndex];
result[1] = array[tailIndex];
if (headIndex >= tailIndex) {
return result;
}
}
return result;
}