給定一個(gè)已按照升序排列的有序數(shù)組,找到兩個(gè)數(shù)使得它們相加之和等于目標(biāo)數(shù)。
函數(shù)應(yīng)該返回這兩個(gè)下標(biāo)值 index1 和 index2,其中 index1?必須小于?index2。
說明:
返回的下標(biāo)值(index1 和 index2)不是從零開始的。
你可以假設(shè)每個(gè)輸入只對應(yīng)唯一的答案,而且你不可以重復(fù)使用相同的元素。
示例:
輸入:numbers = [2, 7, 11, 15], target = 9輸出:[1,2]解釋:2 與 7 之和等于目標(biāo)數(shù) 9 。因此 index1 = 1, index2 = 2 。
這道題與昨天的相比增加了一點(diǎn)難度,測試用例比昨天的復(fù)雜了很多。
在昨天代碼的基礎(chǔ)上做了一些修改,先使用集合去重,然后再查找來提升運(yùn)行速度。
class Solution:
? ? def twoSum(self, numbers: List[int], target: int) -> List[int]:
? ? ? ? l = set(numbers)
? ? ? ? for i in l:
? ? ? ? ? ? ll = []
? ? ? ? ? ? i = numbers.index(i)
? ? ? ? ? ? ll.append(i+1)
? ? ? ? ? ? if target-numbers[i] in set(numbers[i+1:]):
? ? ? ? ? ? ? ? for j in range(i+1,len(numbers)):
? ? ? ? ? ? ? ? ? ? if numbers[j] == target-numbers[i] :
? ? ? ? ? ? ? ? ? ? ? ? ll.append(j+1)
? ? ? ? ? ? ? ? ? ? ? ? return ll