力扣-两数之和
1.题目描述
2.题目链接
LCR 006. 两数之和 II - 输入有序数组 - 力扣(LeetCode)
3.题目代码
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即可。