两数之和Python3

这篇博客探讨了两种解决两数之和问题的方法。第一种是暴力穷举,时间复杂度为O(n^2),虽然简单但效率较低。第二种方法利用哈希映射降低时间复杂度到O(n),但空间复杂度增加到O(n)。这两种方法在实际应用中各有优劣,哈希映射通常更为高效。
摘要由CSDN通过智能技术生成

 ​​​​​​

 题解一:暴力穷举法

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

暴力穷举,时间复杂度在O(n^{2}),空间复杂度在O(1),提交结果如下:

题解二: 

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic = {}
        # 创建字典,建立列表元素值nums[i]和索引i的映射关系(便于后期直接通过元素值找到其索引值)
        for i in range(len(nums)):
            dic[nums[i]] = i

        for i in range(len(nums)):
            # 需要找的目标元素值
            j = target - nums[i]
            # 如果字典中能够找到目标元素,
            # 并且目标元素j的位置dic[j]和原来的元素nums[i]的位置不相等,返回元素索引值;
            # 避免如[2,3,3],找两数之和为6时,打印的元素位置都是1
            if j in dic and i != dic[j]:
                return [i, dic[j]]

这种方式可以将时间复杂度降到O(n),但是空间复杂度升到O(n),不过综合效率比暴力穷举法还是更高一点,提交结果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值