前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Day 9 :什么是哈希表?

Day 9 :什么是哈希表?

作者头像
double
发布2020-06-04 15:54:59
4640
发布2020-06-04 15:54:59
举报
文章被收录于专栏:算法channel算法channel

1 Day 8 总结

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

题目描述如下:

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

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

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

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

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

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

代码 :

代码语言:javascript
复制
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) 时间复杂度找到某个元素?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 不高效解1:index 时间复杂度O(n)
  • 不高效解2:两层 for
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档