用Python刷LeetCode【1.两数之和(TwoSum)】

两数之和算法优化
本文探讨了在解决“两数之和”问题时,从双重循环到使用字典进行优化的过程。通过对比两种方法,解释了为何字典能够显著提高算法效率,达到O(n)的时间复杂度。文章还提到了enumerate()函数的巧妙应用,以及如何通过一次循环找到目标值。

 

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i] + nums[j] == target:
                    return (i,j)

感觉是写的有点不严谨

第一次执行 6788 ms通过了

但是第二次执行时,有一个16021位的列表,执行超时了

看别人写的是用字典,觉得不太能理解

然后仔细看了一下排名靠前的答案

字典真好用,真香

重点需要注意的几个点

1.enumerate()函数是一个很神奇的函数,相当于把字典转化为数组,不过是以元租组方式呈现的

2.速度快的原因是只做了一遍For循环,复杂度相当于O(n),把字典每一个值和ID遍历一遍的同时,计算目标值和遍历值之差是否存在与已存好的字典。遍历到了就取出来

这条是后来补的,就两天没看,代码又看不懂了,这。。这好像是我写的。

 

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

END-20181113-0021 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值