【剑指offer】【双指针】57.和为s的两个数字

题目链接:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof/

双指针(对撞指针)

时间复杂度:O(n)
空间复杂度:O(1)
用i和j分别指向数组头和尾,sum = nums[i] + nums[j]
如果sum > target, j--;
如果sum < target, i++;
如果sum == target,将nums[i]与nums[j]追加到数组中,break;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) 
    {
        vector<int> res;
        //分别指向头和尾
        int i = 0, j = nums.size() - 1;
        //没有越界
        while(i < nums.size() && j >= 0)
        {
            int sum = nums[i] + nums[j];
            //sum > target,j往向前移动
            if(sum > target) 
                j--;
            //sum < target, i向后移动
            else if(sum < target) 
                i++;
            //找到答案
            else
            {
                res.push_back(nums[i]);
                res.push_back(nums[j]);
                break;
            }
        }
        return res;
    }
};
posted @ 2020-04-19 11:10  NaughtyCoder  阅读(105)  评论(0)    收藏  举报