题目描述:
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
解题思路:
使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。
如果两个指针指向元素的和 sum == target,那么这两个元素即为所求。
如果 sum > target,移动较大的元素,使 sum 变小一些;
如果 sum < target,移动较小的元素,使 sum 变大一些。
过程演示:
代码展示:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i=0,j=nums.size()-1;
vector<int> rs;
while(i<j)
{
int sum=nums[i]+nums[j];
if(sum==target)
{
rs.push_back(nums[i]);
rs.push_back(nums[j]);
return rs;
}
if(sum>target) j--;
else i++;
}
return rs;
}
};