1. 程式人生 > >LeetCode演算法題167:兩數之和 II - 輸入有序陣列解析

LeetCode演算法題167:兩數之和 II - 輸入有序陣列解析

給定一個已按照升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。
函式應該返回這兩個下標值 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 []