[LeetCode] 167. Two Sum II - Input array is sorted

题目链接:传送门

Description

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. Please note that 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.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

Solution

题意:

给定一个有序的数组(递增),找到数组中两个数,使得这两个数相加之和等于target,求这两个数的下标

思路:

双指针,一个从左往右扫,一个从右往左扫,因为数组有序,故而指针的移动方向是固定的

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int x = 0, y = numbers.size() - 1;
        while (x < y) {
            while (numbers[x] + numbers[y] > target)  y--;
            if (numbers[x] + numbers[y] == target)  return vector<int>{x + 1, y + 1};
            x++;
        }
    }
};
posted @ 2018-03-26 14:36  酒晓语令  阅读(84)  评论(0编辑  收藏  举报