1. 题目
2. 思路
(1) 双指针法
- 利用指针left从左向右遍历,指针right从右向左遍历,计算left和right所指向的元素之和。
- 由于数组是有序的,因此当left右移时,sum会减小,当right左移时,sum会增大,根据sum与target的大小,移动left和right到目标位置上即可。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0;
int right = numbers.length - 1;
int sum;
while (left < right) {
sum = numbers[left] + numbers[right];
if (sum == target) {
return new int[]{left + 1, right + 1};
} else if (sum < target) {
left++;
} else {
right--;
}
}
return new int[0];
}
}