1. /**
    2. * @Description 对撞指针
    3. * left = 最左边的最小值
    4. * right = 最右边的最大值
    5. * 因为此题目一定有解,且数组有序
    6. *
    7. * 所以如果 left + right = tarfet则直接返回
    8. * 如果 left + right < target 说明此时值小了,只能把左边又移
    9. * 如果 left + right > target 说明此时值大了,只能把右边左移
    10. * @Date 2022/1/9 5:58 下午
    11. * @Author wuqichuan@zuoyebang.com
    12. **/
    13. class Solution {
    14. public int[] twoSum(int[] numbers, int target) {
    15. int left = 0;
    16. int right = numbers.length -1;
    17. while (left < right) {
    18. if(numbers[left] + numbers[right] == target){
    19. return new int[]{left+1,right+1};
    20. }else if(numbers[left] + numbers[right] < target){
    21. left++;
    22. }else{
    23. right--;
    24. }
    25. }
    26. return new int[] {-1, -1};
    27. }
    28. }