leetcode no.1

m0_46149106發表於2020-10-14

題目:給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的 兩個 整數。

你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。

示例:

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

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

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dict_num = {}
        index_list = []
        for i in range(len(nums)):
            num = target - nums[i]
            if num not in dict_num:
                dict_num[nums[i]] = i
            else:
                index_list.append(dict_num[num])
                index_list.append(i)
        return index_list
a = Solution()
print(a.twoSum([2,7,11,9],9))

利用debug進行闡述思想:
第一步 i = 0

在這裡插入圖片描述
這裡的第一個元素是2。9-2為7,可是字典為空,所以並不在字典中。
只能將其寫入字典,從而字典不為空
在這裡插入圖片描述
2進入字典中繼續迴圈,在這裡插入圖片描述
i 為1 ,差值為2 正好剛才2放入字典中 查詢到 有2 那麼就滿足題目要求。
執行else語句 將其加入到index_list空列表中,最終答案
在這裡插入圖片描述

相關文章