1.兩數之和 Two Sum

打瞌睡~發表於2020-12-19

題目描述

給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。

示例

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

來源:力扣(LeetCode) 連結

第一次題解

第一次題解用了兩層迴圈遍歷,時間複雜度為 O ( n 2 ) O(n^2) O(n2)。執行用時:400 ms, 在所有 Python3 提交中擊敗了36.74%的使用者;記憶體消耗:14.8 MB, 在所有 Python3 提交中擊敗了18.87%的使用者。還是挺慢的。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        l = []
        for i in range(len(nums)):
            for j in range(i + 1, len(nums)):
                if nums[i] + nums[j] == target:
                    l.append(i)
                    l.append(j)
        return l

最優題解

看了別人的答案,最優時間複雜度是 O ( n ) O(n) O(n),用的字典。執行用時:32 ms, 在所有 Python3 提交中擊敗了98.10%的使用者;記憶體消耗:14.9 MB, 在所有 Python3 提交中擊敗了18.00%的使用者。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap = {}
        for index, num in enumerate(nums):
            another_num = target - num
            if another_num in hashmap:
                return [hashmap[another_num], index]
            hashmap[num] = index
        return None

相關文章