二和解(leetcode)背后的思维过程Python 3

二和解(leetcode)背后的思维过程Python 3,python,algorithm,Python,Algorithm,例如,nums=[2,7,11,15],target=9-->回答:[0,1] 解决方案张贴在上面。我知道到目前为止有很多关于解决方案的解释。我理解每一行代码的作用,以及如何使用它来获得答案。我的困境是…如何从零开始概念化答案?为什么人们会认为n=target-num是必要的?是的,基本上我解决这个问题的思考过程可能会变成这样 : (解释问题以供读者理解):返回给定列表中两个整数的索引,其和等于给定目标 一,。比如try brute force,它基本上意味着在列表中添加每一个唯一的元素对,直

例如,nums=[2,7,11,15],target=9-->回答:[0,1]



解决方案张贴在上面。我知道到目前为止有很多关于解决方案的解释。我理解每一行代码的作用,以及如何使用它来获得答案。我的困境是…如何从零开始概念化答案?为什么人们会认为n=target-num是必要的?

是的,基本上我解决这个问题的思考过程可能会变成这样 :

(解释问题以供读者理解):返回给定列表中两个整数的索引,其和等于给定目标

一,。比如try brute force,它基本上意味着在列表中添加每一个唯一的元素对,直到我们得到一个总和等于目标的元素对

时间复杂度:最坏情况下为O(N2)。例如:nums_list=[1,2,3,4]和target=7

二,。现在,我们可以将时间复杂度降低到O(N)吗?用laymam的话来说,这意味着我只需要使用一个循环来迭代列表

因此,只迭代一次意味着,我们需要存储一些关于访问元素的值,这将有助于我们在迭代列表时找到元素对

让我们举一个小例子,假设我们的目标=10,元素对是[A,B],如果A=3,我们确定B=10-3=7。因此,我们可以检查在访问的元素中是否有元素B(与目标B/w和A的差异),如果当前元素是A,则给定目标

因此,这给了我们一个想法列表,记录所有访问的元素,如果目标值和当前元素之间的差异已经是一个访问的元素,那么HOLA

我们得到了一对,即[当前元素,目标-当前元素(如果在访问的元素列表中可用)]

只需重命名给定代码即可提高代码可读性

    class Solution:
        def twoSum(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[int]
            """
            h = {}
            for i, num in enumerate(nums):
                n = target - num
                if n not in h:
                    h[num] = i
                else:
                    return [h[n], i]
因此,我在“n=target-num”后面的思考过程是:

class Solution:
    def twoSum(self, list_nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        visited_elements = {}
        for index, num in enumerate(list_nums):
            difference = target - num
            if difference not in visited_elements:
                visited_elements[num] = index
            else:
                return [visited_elements[difference], index]