Day 9 :什么是哈希表?

1 Day 8 总结

Day 8 是 LeetCode 中非常经典的一道题目:两数之和。

题目描述如下:

大家注意审题,确定输入是什么,输出又是什么,假定又是什么。

输入:待寻找的列表 nums, 两数之和 target

输出:有且仅有满足要求的一对整数的下标

假定:一定存在,且仅有一个答案

题目分析:两个数之和等于 target, 首先标记所有遍历过的数,如果 target 减去当前被遍历到的值 e 后,即 target-e 被标记过,则找到答案。

判断值是否在某个容器中,做到 O(1) 时间复杂度的便是最常用的散列表,对应 Python 中的字典。就本题而言,键为标记元素值,字典值为数组下标,所以更加确定使用字典这个数据结构。

代码 :

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        d = {}
        for i,e in enumerate(nums):
            if target -e in d:
                return [i,d.get(target-e)]
            d[e] = i 

以上是比较高效的解法之一。

从星球中星友提交的代码看,有一些星友的代码就是上面的实现思路。

但是,也有一些星友的代码是这样的,解并没有达到时间复杂度为 O(n),大家不妨参考并回头检查下自己写的。

不高效解1:index 时间复杂度O(n)

index 复杂度为 O(n), 所以实际时间复杂度为 O(n^2),尽管表面上看只有一个 for 循环。

不高效解2:两层 for

下面代码两层 for,空间复杂度虽然为 O(1),但是时间复杂度为 O(n^2)。所以需要找到牺牲空间换取时间的方法。

以上使用散列表牺牲空间,但是换取时间,实际中能找到节省时间的解往往更有价值。

2 Day 9 打卡题:什么是哈希表?

明天的打卡题,我们就来学习最重要的数据结构之一:散列表或哈希表,那么什么是哈希表呢?哈希表怎么做到 O(1) 时间复杂度找到某个元素的呢?

提供参考资料如下,大家可参考。

《我的第一本算法数》.pdf ,星球内提供电子版,仅供个人学习用,严禁用于其他用途。

图片1:哈希表的基本用途

图2:哈希表的查找规则: 图3:哈希表常遇到键冲突问题: 图 4 :解决方法: 星球内的星友直接学习本书的 1-6 解即可。然后把打卡题: 什么是哈希表?哈希表怎么做到 O(1) 时间复杂度找到某个元素?

从零学程序员必备的算法知识,欢迎加入这个星球,目前星友 450 名,每天打卡提交代码人次 100 人左右,长居星球活跃榜。

进入星球后,查看【作业汇总】帖,学习星球使用方法,之前所有打卡题和精选回答等。

下面是星友 Star 和 耶耶耶island 在星球内打卡7天后的一个总结,自己说的再好都没有大家说好来的可信。

长按二维码领取优惠券,性价比极高,目前加入只有非常良心的 19 元。并且打卡 300 天,退还除平台收取的其他所有费用。

长按二维码,加入我的知识星球

本项目属于机器学习的简单部分,基于为了快速理解机器学习而搭建的人工智能速成项目,大家可以根据其中的项目时间进行相关的学习.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值