youlitaiGLZ的LeetCode刷題筆記1

1.兩數之和

題目描述:給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。


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

題目解法:
1.首先想到暴力解法,兩層循環遍歷所有的數字組合情況,得到符合要求的一組解對應的數字下標組合。這種方法的時間複雜度爲O(n2n^2),效率較低,有一定超時風險。空間複雜度爲O(1)。
2.爲了優化時間複雜度,想到運用hash表的方法記錄數字的索引。這樣只需要循環兩邊:第一遍循環nums數組將數字和對應下標記錄在hash表中,第二次循環判斷另一個加數(target-當前數字)是否存在於hash表中。這樣時間複雜度爲O(n),空間複雜度O(n)。
3.以上方法可以再次優化。僅做一次循環,循環時判斷當前數字的另一加數是否在表中,如果在則輸出答案,如果不在則將當前數字和索引記錄入hash表。這樣做的時間複雜度爲O(n)(因爲少了一次循環,可以認爲是從2n優化到n),空間複雜度爲O(n)(這樣在最差情況下需要n的空間,而方法2中必定需要n空間,空間複雜度上也有優化)


代碼
本題我使用了python作爲編程環境,使用python中的字典構建hash表。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        sumdict = {}
        for i in range(len(nums)):
            another_num = target - nums[i]
            if another_num in sumdict:
                return [sumdict[another_num],i]
            sumdict[nums[i]] = i

發佈了7 篇原創文章 · 獲贊 3 · 訪問量 651
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章