/** * @Description 对撞指针 * left = 最左边的最小值 * right = 最右边的最大值 * 因为此题目一定有解,且数组有序 * * 所以如果 left + right = tarfet则直接返回 * 如果 left + right < target 说明此时值小了,只能把左边又移 * 如果 left + right > target 说明此时值大了,只能把右边左移 * @Date 2022/1/9 5:58 下午 * @Author wuqichuan@zuoyebang.com **/class Solution { public int[] twoSum(int[] numbers, int target) { int left = 0; int right = numbers.length -1; while (left < right) { if(numbers[left] + numbers[right] == target){ return new int[]{left+1,right+1}; }else if(numbers[left] + numbers[right] < target){ left++; }else{ right--; } } return new int[] {-1, -1}; }}