Python算法——1.两数之和问题


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目分析

题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
题目链接:求两数之和

题目分析:需要从数组nums获取两个元素,它们的和为目标值target,最容易让我们想到的就是暴力枚举遍历数组的方法,但是时间复杂度较大,于是我们也可以采用哈希表的方法,接下来主要介绍这两个方法。

二、求解

1.方法一:暴力枚举

思路及算法
最简单的想法就是,遍历数组每一个数X,找的另一个数Y满足条件:
X + Y = target
得到X和Y的下标并返回
代码:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
    	n = len(nums)	# 获取数组长度
    	for X in range(n-1):	# 遍历每一个数X
    		for Y in range(X+1, n):		# 遍历每一个数Y
    			if nums[X] + nums[Y] == target:		# 是否满足X + Y = target
    				return [X, Y]		# 返回对应索引
    	return []	# 没有符合条件的元素,返回空

时间复杂度:O(N2)
空间复杂度:O(1)

考虑这种算法需要两次遍历数组,时间复杂度较高,主要原因是查找Y时间较长,可以考虑采用其他查找算法代替枚举,接下来介绍采用哈希表的方法进行解题。

2.方法二:哈希表

思路及算法:
我们已经知道方法一时间消耗长的主要原因,就是在查找Y时消耗时间较长,时间复杂度为O(N),采用哈希表查找可以将时间复杂度降低为O(1)
我们创建一个哈希表,对于每一个X,先在哈希表中查找target - X是否存在,再插入X,即可防止X与自己匹配,哈希表的key为数组中的值,value为对应索引

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()	# 创建哈希表
        for i, X in enumerate(nums):
            if target - X in hashtable:	# 判断target
                return [hashtable[target - X], i]	# 返回索引
            hashtable[nums[i]] = i	# 哈希表不存在target - X,将X的索引值插入哈希表
        return []	# 没有符合条件的元素,返回为空

时间复杂度:O(N)
空间复杂度:O(N) 主要为哈希表的开销


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值