题目
在Two Sum的基础上进行了修改,输入数组是排序的。
思路
和《剑指Offer》的剑指Offer系列-面试题41:和为s的两个数字以及和为s的正数序列 一样,不再赘述。
当提交过后以为结果一定是乐于看见的AC,结果发现出现了Submission Result: Time Limit Exceeded
错误。查看错误用例,发现是下面这玩意:
[0,……0,2,3,9,……9] (n多个相同的0和n多个相同的9)
5
想了想,可能是重复的数字太多,每次遍历都需要判断一次是否和target相等,于是加上了一个while
循环,跳过重复的数字。
代码
public int[] twoSum(int[] numbers, int target) {
int[] res = new int[2];
if (numbers == null || numbers.length < 2) {
return res;
}
int left = 0;
int right = numbers.length - 1;
while (left < right) {
int tmp = numbers[left] + numbers[right];
if (tmp == target) {
res[0] = left + 1;
res[1] = right + 1;
return res;
} else if (tmp < target) {
int num = numbers[left];
while (num == numbers[left]) {
left++;
}
} else {
int num = numbers[right];
while (num == numbers[right]) {
right--;
}
}
}
return res;
}