和为s的两个数字

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

思路:

因为是递增排序数组,所以可以定义两个下标,一左一右,左边指向开端,右边指向末尾。看这两个下标指向的数之和跟target进行比较,如果相等,则找到了。如果大于target,右边下标减一。如果小于target,左边下标加一。

代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int len = nums.size();
        int left = 0,right = len-1;
        while(left<right) {
            int sum = nums[left]+nums[right];
            if(sum == target) {
                return {nums[left],nums[right]};
            }
            else if(sum > target) {
                right--;
            }
            else {
                left++;
            }
        }
        return {};
    }
};