LeetCode 第一題:兩數之和--python
阿新 • • 發佈:2019-01-03
與C++想法一樣,個人實現的是最簡單的for迴圈:
2.字典優化:
以下優化轉自(wx公眾號:小詹學python[先註明:不是博主的公眾號]):1.將上述雙迴圈可以優化一下為單迴圈:class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ towSum=[] for i in range(len(nums)): for j in range(i+1,len(nums)): if(nums[i]+nums[j]==target): towSum.append(i) towSum.append(j) return towSum
上述兩種方法迴圈時間都很長:按照官方程式碼來說,還是採用字典更好:class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ towSum=[] for i in range(len(nums)): onenum=nums[i] twonum=target-nums[i] if twonum in nums: j=nums.index(twonum) if i!=j: towSum.append(i) towSum.append(j) return towSum
2.字典優化:
class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ #建立字典一:存入nums[i],i num_dict={num[i]: i fori in range(len(nums))} #建立字典二:存入i:target-nums[i] num_dict2={i:target-num[i] fori in range(len(nums))} towSum=[] for i in range(len(nums)): j=num_dict.get(num_dict2.get(i)) if (j is not None) and (j!=i): towSum=[i,j] break return towSum