0167. Two Sum II - Input Array Is Sorted #
题目 #
- 给定一个下标从
1
开始的整数数组numbers
,该数组已按 非递减顺序排列 - 从数组中找出满足相加之和等于目标数
target
的两个数的下标。- 如果设这两个数分别是
numbers[index1]
和numbers[index2]
,则1 <= index1 < index2 <= numbers.length
。
- 如果设这两个数分别是
- 以长度为
2
的整数数组[index1, index2]
的形式返回这两个整数的下标index1
和index2
。 - 假设每个输入 只对应唯一的答案 ,且 不可以 重复使用相同的元素。
- 所设计的解决方案必须只使用常量级的额外空间。
思路 #
双指针 #
代码 #
双指针 #
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] ans = new int[2];
int left = 0, right = numbers.length - 1;
while (left < right) {
if (numbers[left] + numbers[right] > target) right -= 1;
else if (numbers[left] + numbers[right] < target) left += 1;
else {
ans[0] = left + 1; ans[1] = right - 1;
break;
}
}
return ans;
}
}