题目与示例:

  1. 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target
  2. 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length
  3. 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
  4. 示例 1
  5. 输入:numbers = [2,7,11,15], target = 9
  6. 输出:[1,2]
  7. 解释:2 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2
  8. 示例 2
  9. 输入:numbers = [2,3,4], target = 6
  10. 输出:[1,3]
  11. 示例 3
  12. 输入:numbers = [-1,0], target = -1
  13. 输出:[1,2]
  14. 来源:力扣(LeetCode
  15. 链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
  16. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的代码:

1.暴力法:

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int[] result = new int[2];
        for(int i=0;i<numbers.length;i++){
            for(int j=i+1;j<numbers.length;j++){
                if(numbers[j]+numbers[i] == target){
                    result[0] = i+1;
                    result[1] = j+1;
                }
            }

        }
        return result;
    }
}

2.双指针:

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int left = 0;
        int right = numbers.length-1;
        while(left<right){
            int sum = numbers[left]+numbers[right];
            if(sum == target){
                return new int[]{left+1,right+1};
            }else if(sum < target){
                left++;
            }else{
                right--;
            }
        }
        return null;
    }
}