1. 程式人生 > >用Python刷LeetCode【1.TwoSum】

用Python刷LeetCode【1.TwoSum】

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i] + nums[j] == target:
                    return (i,j)

感覺是寫的有點不嚴謹

第一次執行 6788 ms通過了

但是第二次執行時,有一個16021位的列表,執行超時了

看別人寫的是用字典,覺得不太能理解

然後仔細看了一下排名靠前的答案

字典真好用,真香

重點需要注意的幾個點

1.enumerate()函式是一個很神奇的函式,相當於把字典轉化為陣列,不過是以元租組方式呈現的

2.速度快的原因是隻做了一遍For迴圈,複雜度相當於O(n),把字典每一個值和ID遍歷一遍的同時,計算目標值和遍歷值之差是否存在與已存好的字典。遍歷到了就取出來

這條是後來補的,就兩天沒看,程式碼又看不懂了,這。。這好像是我寫的。

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        nums_dict = {}
        for i, num in enumerate(nums):
            if num in nums_dict:
                return [nums_dict[num], i]
            else:
                nums_dict[target - num] = i

END-20181113-0021