Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.

    The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.

    Note:

    • Your returned answers (both index1 and index2) are not zero-based.
    • You may assume that each input would have exactly one solution and you may not use the same element twice.

    Example:

    1. Input: numbers = [2,7,11,15], target = 9
    2. Output: [1,2]
    3. Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.

    题意

    给定一个升序数组,找到数组中的两个数,使它们的和正好为目标值,返回这两个数的下标。

    思路

    Two Pointers。


    代码实现

    1. class Solution {
    2. public int[] twoSum(int[] numbers, int target) {
    3. int left = 0, right = numbers.length - 1;
    4. while (left < right) {
    5. int sum = numbers[left] + numbers[right];
    6. if (sum < target) {
    7. left++;
    8. } else if (sum > target) {
    9. right--;
    10. } else {
    11. return new int[]{left + 1, right + 1};
    12. }
    13. }
    14. return null;
    15. }
    16. }