题目:
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. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
思路:
1、根据题目可得,给定的输入是升序排序的排列, 且只有一个合适的结果
2、利用两个指针,分别指向数组的首尾。求当前两指针的和,和大于target则后面的指针向前移动,和小于target则前面的指针向后移动,
等于target时将位置存入结果并返回
代码:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> res;
int i = 0, j = numbers.size() - 1;
while (i < j){
if (numbers[i] + numbers[j] == target){
res.push_back(i + 1);
res.push_back(j + 1);
break;
}else if (numbers[i] + numbers[j] < target) i++;
else j--;
}
return res;
}