1.题目描述

2.题目链接
LCR 006. 两数之和 II - 输入有序数组 - 力扣(LeetCode)
3.题目代码
java
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[]ret=new int[2];
int left=0,right=numbers.length-1;
while(left<right){
if(numbers[left]+numbers[right]>target){
right--;
}
else if(numbers[left]+numbers[right]<target){
left++;
}
else{
ret[0]=left;
ret[1]=right;
return ret;
}
}
return ret;
}
}
4.解题思路
这道题的解题思路也是用双指针来解决的。
1).定义双指针
我们定义指针left为数组的最左边,指针right是数组的最右边。
2).利用单调性移动双指针
当numbers[left]+numbers[right]>target 时,不等式要想成立 ,左边就需要减小 ,而numbers[left]已经是最小值 ,所以只能numbers[right]减小 ,也就是right--。
当numbers[left]+numbers[right]<target 时,不等式要想成立 ,左边就需要增大 ,而numbers[right]已经是最大值 ,所以只能numbers[left]增大 ,也就是left++。
当numbers[left]+numbers[right]=target 时,不等式成立,将left和right这两个元素下标填入结果数组ret中,返回ret即可。