题目:
Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.
思路:
因为数组有序,所以设置两个变量left和right,分别指向数组的首和尾。如果两数之和小于target,则left向右移动,这样两数之和才能变大;反之,right向左移动,一个道理。
代码实现:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
if (numbers.size() < 2){
return {};
}
vector<int> ret;
int left = 0;
int right = numbers.size()-1;
while (left < right){
int t = numbers[left] + numbers[right];
if (t == target){
ret.push_back(left+1);
ret.push_back(right+1);
break;
}else if (t > target){
--right;
}else{
++left;
}
}
return ret;
}
};