題目:
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解法:
1、暴力法
兩次循環,遍歷數組得到nums[ j ] = target - nums[ i ],此方法時間復雜度為O(n^2),在官方測試數據下時間會超標(我連跑了四次時間都超了,遂放棄此法)
1 class Solution: 2 def twoSum(self, nums: List[int], target: int) -> List[int]: 3 for i in range(len(nums)): 4 for j in range(len(nums)): 5 if j > i: 6 if nums[j] == target - nums[i]: 7 return i,j
2、借助字典實現
可以借用哈希(python叫字典),我們遍歷元素的時候,且記錄元素的下標,當我們找target-a
時候,只需要在字典找,就可以了,查找字典時間復雜度為O(1)
所以,,時間復雜度:O(n),空間復雜度:O(n)
1 class Solution: 2 def twoSum(self, nums, target): 3 n = len(nums) 4 lookup = {} 5 for i in range(n): 6 tmp = target - nums[i] 7 if tmp in lookup: 8 return [lookup[tmp], i] 9 lookup[nums[i]] = i