【2019/03/03】
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.
Note:
Your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution and you may not use the same element twice.
Example:
【思路】:
- 由于数组已经排好序了,利用升序的性质,用O(n)的时间复杂度完成;
- 用两个指针left和right分别指向数组的第一个和最后一个元素
- 当tmp = target的时候就返回两个值的索引值;
- 当tmp < target的时候,左值 ++;
- 当tmp > target的时候,右值 --;
- 返回的时候indices的值都要+1(因为题目要求不能是zero-based)
【代码如下】
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target)
{
vector<int> ret(2, -1);
int left = 0;
int right = numbers.zise - 1;
while( left < right )
{
int tmp = numbers[left] + numbers[right];
if( tmp == target)
{
ret[0] = left + 1;
ret[1] = right + 1;
break;
}
else if (tmp < target)
{
left ++;
}
else
right--;
}
return ret;
}
};