LeetCode演算法題167:兩數之和 II - 輸入有序陣列解析
阿新 • • 發佈:2018-11-11
給定一個已按照升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。
函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。
說明:
返回的下標值(index1 和 index2)不是從零開始的。
你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。
示例:
輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等於目標數 9 。因此 index1 = 1, index2 = 2 。
這個題更簡單一些,因為是有序陣列,所以一定是一個前面的數加一個後面的數,那就可以用雙指標來遍歷。這裡設定兩個索引,一個從頭一個從尾,然後根據相加的數來移動索引,如果等於返回索引+1,如果大就減小尾索引,如果小就增大頭索引。
C++原始碼:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int left = 0, right = numbers.size()-1;
while (left < right)
{
int num = numbers[left] + numbers[right];
if (num == target) return vector<int> {left+1, right+1};
if (num < target) left++;
if (num > target) right--;
}
return vector<int>{};
}
};
python3原始碼:
class Solution:
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
left = 0
right = len(numbers) - 1
while left < right:
num = numbers[left]+numbers[right]
if num == target:
return [left+1, right+1]
if num > target:
right -= 1
if num < target:
left += 1
return []