问题1:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
思路:两个指针,由于是排序数组,初始时分别指向头和尾。
如果指针指向的两个数的和大于s,则j减一;小于s,i加一;等于s,则返回结果。
循环结束条件i>=j。
代码:
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int>& nums, int target) {
int len=nums.size();
vector<int> res;
if(len==1)
return res;
for(int i=0,j=len-1;i<j;)
{
if(nums[i]+nums[j]>target)
j--;
else if(nums[i]+nums[j]<target)
i++;
else
{
res.emplace_back(nums[i]);
res.emplace_back(nums[j]);
break;
}
}
return res;
}
};
复杂度分析: