Leetcode力扣1 兩數之和(Python版)

愛科研的瞌睡蟲發表於2020-12-30

題目描述

給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

暴力求法

直接使用兩個for迴圈

   def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for m in range(i+1, len(nums)):
                if nums[i]+nums[m] == target:
                    return [i,m]

優化版(使用字典)

使用字典的鍵

    def twoSum(self, nums: List[int], target: int) -> List[int]:
        num_dict = {}
        for i, num in enumerate(nums):
            num_dict[num]=i   # num_dict:[2:0,7:1,11:2,15:3]
        for j in range(len(nums)):
            tar = target - nums[j]
            if tar in num_dict.keys():  # num_dict.keys()獲取所有的鍵
                return [j,num_dict[tar]]

相關文章