class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int p1=0,p2;
int s=numbers.size();
p2=s-1;
while(numbers[p1]+numbers[p2]!=target)
{
if(numbers[p1]+numbers[p2]>target)
p2--;
else
p1++;
}
vector<int>an;
an.push_back(min(p1+1,p2+1));
an.push_back(max(p1+1,p2+1));
return an;
}
};
双指针,有序数组,和大右指针左移,和小左指针右移,可能换位,最后比个大小
也可以,确定一个在二分找另
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
for (int i = 0; i < numbers.size(); ++i) {
int low = i + 1, high = numbers.size() - 1;
while (low <= high) {
int mid = (high +low) / 2 ;
if (numbers[mid] == target - numbers[i]) {
return {i + 1, mid + 1};
} else if (numbers[mid] > target - numbers[i]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
return {-1, -1};
}
};
一个