Two Sum II - Input array is sorted
题目描述
给出一个排好序的升序序列,从里面选择两个数,使两个数之和为一个给出的整数target。
算法分析
很简单的一道题,算法可谓多种多样。
我们可以利用题目的一个特点,就是给出的序列已经是升序的了。
因此我们可以设置两个指针分别在序列头和序列尾。
- 若指针指向的数字之和比target大,则尾指针减一。
- 若指针指向的数字之和比target小,则头指针加一。
显然,算法时间复杂度是O(n)。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int size = numbers.size();
int index1=0, index2=size-1;
vector<int> ans;
while (true)
{
int tmp = numbers[index1]+numbers[index2];
if (tmp == target)
{
ans.push_back(index1+1);
ans.push_back(index2+1);
return ans;
}
else if (tmp < target) index1++;
else index2--;
}
}
};