《剑指offer》面试题57. 和为s的两个数字

问题描述

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

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
示例 2:

输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
 

限制:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6

代码

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

结果

执行用时 :452 ms, 在所有 C++ 提交中击败了41.52%的用户
内存消耗 :100.8 MB, 在所有 C++ 提交中击败了100.00%的用户
posted @ 2020-04-18 16:24  曲径通霄  阅读(105)  评论(0编辑  收藏  举报