【剑指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;
}
};
知识的价值不在于占有,而在于使用