給定一個(gè)已按照升序排列 的有序數(shù)組,找到兩個(gè)數(shù)使得它們相加之和等于目標(biāo)數(shù)。
函數(shù)應(yīng)該返回這兩個(gè)下標(biāo)值 index1 和 index2,其中 index1 必須小于 index2。
說(shuō)明:
返回的下標(biāo)值(index1 和 index2)不是從零開(kāi)始的。
你可以假設(shè)每個(gè)輸入只對(duì)應(yīng)唯一的答案,而且你不可以重復(fù)使用相同的元素。
示例:
輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等于目標(biāo)數(shù) 9 。因此 index1 = 1, index2 = 2 。
解答:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
// 數(shù)組有序,且有解
int left=0; // 左指針
int right=numbers.size()-1; // 右指針
while(left<right){
int sum=numbers[left]+numbers[right];
if(sum<target) // 兩數(shù)和小于目標(biāo)值,左指針向右移動(dòng)
left++;
else if(sum>target) // 兩數(shù)和大于目標(biāo)值,右指針向左移動(dòng)
right--;
else
return {left+1,right+1}; // 直到兩數(shù)之和等于目標(biāo)值,返回下標(biāo)值,不是從0開(kāi)始所以需要加1
}
return {0,0}; // 目標(biāo)值為0
}
};