原题链接:Leecode 167. 两数之和 II - 输入有序数组
解法一:二分
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
for(int i=0;i<numbers.size();i++)
{
int l=i+1,r=numbers.size()-1;
while(l<=r)
{
int mid=l+(r-l)/2;
if(numbers[mid]+numbers[i]==target) return {i+1,mid+1};
else if(numbers[mid]+numbers[i]<target) l=mid+1;
else r=mid-1;
}
}
return {};
}
};
解法二:双指针
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int l=0,r=numbers.size()-1;
while(1)
{
if(numbers[l]+numbers[r]==target) break;
else if(numbers[l]+numbers[r]>target) r--;
else l++;
}
return {l+1,r+1};
}
};