LeetCode 演算法題之:TwoSum
阿新 • • 發佈:2019-02-06
題目
給定一個無重複的整數陣列和一個目標值,找出陣列中兩個和為目標值的元素的索引。
舉例
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
解法
最簡單的做法是使用雙重迴圈。
def twoSum(nums, target): for i in range(0, len(nums)): for j in range(i + 1, len(nums)): if nums[i] + nums[j] == target: return [i, j]
但是時間複雜度為 O(n^2),空間複雜度為 O(1),無法通過。
改用HashTable儲存列表資料,以空間換取時間
def twoSum(nums, target): dct = {} for i, x in enumerate(nums): dct[x] = i for i, x in enumerate(nums): j = dct[target - x] if target - x in dct else -1 #關鍵之處 if j != -1 and j != i: return [i, j]
再進一步,在單次迴圈中處理
def twoSum(nums, target):
dct = {}
for i, x in enumerate(nums):
j = target - x
if j in dct:
return [dct[j], i]
else:
dct[x] = i