leetcode力扣刷題系列python——1、兩數之和


題目:

給定一個整數數組 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM