【LeetCode】哈希算法—两数之和(python实现)

哈希算法简要学习:

一、常见算法简介

顺序查找:是最简单的查找方法。需要对数据集中的逐个匹配。所以效率相对较低,不太适合大量数据的查找问题。

二分法查找:效率很高,但是要求数据必须有序。面对数据排序通常需要更多的时间。
深度优先和广度优先算法:对于大量的数据查找问题,效率并不高。这个我们后面专门讲解。
阿希查找算法:查找速度快,查询插入,删除操作简单等原因获得广泛的应用。

二、哈希的原理

以a = [1, 17, 5, 8, 2, 9, 20, 3, 2, 5]这个数组为例,如果要查找1到10是否在这个数组内,采用顺序查找的方式话,将会依次遍历整个数组,每次都要扫描十次,每次都要扫描n次,时间复杂度为O(n)。

此时如果使用哈希算法,可以先建立一个长度为20的table,用table的下标记录a[i]的出现次数,可以参考下图,直到遍历完整个数组
请添加图片描述

三、程序实现

python代码实现:

def  twosum(nums, target):
	#这个函数只能解决两个数字和,且答案有且仅有一个的情况
	dict = {}
	for i in range(len(nums)):
		num = nums[i]
		if target - num in dict:#判定target - m 是否在字典中
			return (dict[target-num]+1, i +1) #存在返回连个数的下标
		dict[num] = i #若不存在则记录键值对的值
        
s =twosum( [1, 17, 5, 8, 2, 9, 20, 3, 2, 5],11)
print('下标是:',s)
# 下标是: (5, 6)

此方法相当于,把数组num的值与位置记录在了dict字典中,再依次遍历比较得到符合条件的两数对应数组的下标。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值