面试题57:和为s的两个数字
文章目录
题目
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
考点
二分法,双指针
LeetCode版本
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i=0,j=nums.size()-1;
while(i<=j){
int mid = (i+j)>>1;
if(nums[mid] >= target) j = mid-1;
else i = mid+1;
}
vector<int> res;
int rpos = j, lpos = 0;
while(lpos <=rpos){
if(nums[lpos] + nums[rpos] < target) ++lpos;
else if (nums[lpos] + nums[rpos] > target) --rpos;
else{
res.push_back(nums[lpos]);
res.push_back(nums[rpos]);
break;
}
}
return res;
}
};