1. 程式人生 > >1.兩數之和-Python-LeetCode

1.兩數之和-Python-LeetCode

一、題目

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。

例1:

給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

二、解法

我們先設定一個空字典 d ,然後遍歷陣列,字典的鍵存陣列的值,字典的值存陣列的索引地址,當差在字典 d 的鍵裡時,就返回 [d[sub], i], 至於d[sub]i 的順序,因為當前存在字典裡的值都是已經遍歷過的,所以在陣列中的位置都在 i 前面. 這裡我們用字典來存陣列的索引與值的原因是,如果我們直接用Python自帶的 index()

方法,找到某個值的第一個匹配項的索引位置,時間複雜度為O(n),但是用字典的話,時間複雜度為O(1),更何況 x in nums的時間複雜度也為O(n)

程式碼如下:

d= {}
for i in range(len(nums)):
    sub = target - nums[i]
    if sub in d:
        return [d[sub],i]
    d[nums[i]]=i

時間 48ms,擊敗了 94.2%

結語

歡迎關注我的公眾號 瘋子的Python筆記

公眾號二維碼.jpg