题目:

    给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target

    函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length

    你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

    示例 1:

    输入:numbers = [2,7,11,15], target = 9
    输出:[1,2]
    解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
    示例 2:

    输入:numbers = [2,3,4], target = 6
    输出:[1,3]
    示例 3:

    输入:numbers = [-1,0], target = -1
    输出:[1,2]

    提示:

    2 <= numbers.length <= 3 * 104
    -1000 <= numbers[i] <= 1000
    numbers非递减顺序 排列
    -1000 <= target <= 1000
    仅存在一个有效答案


    双指针中间夹:

    1. class Solution {
    2. public int[] twoSum(int[] numbers, int target) {
    3. int[] ans=new int[2];
    4. int n=numbers.length;
    5. int l=0,r=n-1;
    6. //少了l右移,多了r左移
    7. while (r>l){ //注意while的条件,不能用相等判断作条件
    8. if(numbers[l]+numbers[r]<target){
    9. l++;
    10. }
    11. else if(numbers[l]+numbers[r]>target){
    12. r--;
    13. }
    14. else break;
    15. }
    16. ans[0]=l+1;
    17. ans[1]=r+1;
    18. return ans;
    19. }
    20. }