力扣算法题笔记(两数之和)python

文章讨论了一种常见的编程问题——twoSum,对比了使用双重循环、itertools.permutations以及字典查找三种方法的优劣。双重循环效率低,全排列减少内存但未优化时间复杂度,而字典查找以O(1)的时间复杂度实现了高效解决方案。

一、题目介绍

在这里插入图片描述对于这道题,我的第一反应是两次循环的遍历,于是有了下面的代码:

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

但是,这样的运行效率比较低
在这里插入图片描述在这里插入图片描述
我翻到了前面,我们来看看这位同学7.63 MB 的代码示例:

import itertools

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

这位老哥使用了itertools库
itertools.permutations(list,num)可以对list进行全排列,如:
样例1:

    for i in itertools.permutations([1, 2, 3], 2):
        print(i, end="  ")

结果:
在这里插入图片描述
样例2:

for i in itertools.permutations([1, 2, 3,0], 2):
    print(i)

结果:
在这里插入图片描述
这样确实内存运用的更少。

再来看运行时间靠前的代码:

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        map_sum = dict()
        for i in range(len(nums)):
            temp = target - nums[i]
            if temp in map_sum:
                return [map_sum[temp], i]
            map_sum[nums[i]] = i

这个代码只用了12ms,这哥们用的字典,巧妙的利用了字典contains操作的时间复杂度为O(1)。
附上官方文档,关于python各种数据类型的时间复杂度操作:
https://wiki.python.org/moin/TimeComplexity

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值