1. 程式人生 > 其它 >167.兩數之和II-輸入有序陣列

167.兩數之和II-輸入有序陣列

給定一個已按照 非遞減順序排列 的整數陣列numbers ,請你從陣列中找出兩個數滿足相加之和等於目標數target 。

函式應該以長度為 2 的整數陣列的形式返回這兩個數的下標值。numbers 的下標 從 1 開始計數 ,所以答案陣列應當滿足 1 <= answer[0] < answer[1] <= numbers.length 。

你可以假設每個輸入 只對應唯一的答案 ,而且你 不可以 重複使用相同的元素。


示例 1:

輸入:numbers = [2,7,11,15], target = 9
輸出:[1,2]
解釋:2 與 7 之和等於目標數 9 。因此 index1 = 1, index2 = 2 。
示例 2:

輸入:numbers = [2,3,4], target = 6
輸出:[1,3]
示例 3:

輸入:numbers = [-1,0], target = -1
輸出:[1,2]

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

思路

暴力兩個for會超時,因為給定的陣列是有序的,所以用二分查詢

class Solution(object):
    def twoSum(self, numbers, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(numbers)):
            left,right=i+1,len(numbers)-1
            while
left<=right: mid=(left+right)/2 if numbers[mid]==target-numbers[i]: return [i+1,mid+1] elif numbers[mid]>target-numbers[i]: right=mid-1 else: left=mid+1 return []