数据结构之“字典”

  • 字典是什么?
  • LeetCode:349.两个数组的交集
  • LeetCode:20.有效的括号
  • LeetCode:1.两数之和
  • LeetCode:3.无重复字符的最长子串
  • LeetCode:76.最小覆盖子串
  • 思考题

字典是什么?

与集合类似,字典也是一种存储唯一值的数据结构,但它是以键值对的形式来存储
ES6中有字典,名为Map
字典的常用操作:键值对的增删改查

const m = new Map();// 增
m.set('a', 'aa');
m.set('b', 'bb');// 删
m.delete('b');
// m.clear();// 改
m.set('a', 'aaa');//查
m.set('a');

LeetCode:349.两个数组的交集

输入:nums1 = [1,2,2,1],nums = [2,2]
输出:[2]

解题思路
求nums1和nums2都有的值
用字典建立一个映射关系,记录nums1里有的值
遍历nums2,找出nums1里也有的值
解题步骤
新建一个字典,遍历nums1,填充字典
遍历nums2,遇到字典里的值就选出,并从字典中删除

时间复杂度O(m+n),空间复杂度O(m)

LeetCode:20.有效的括号


时间复杂度O(n),空间复杂度O(n)

LeetCode:1.两数之和

给定nums = [2,7,11,15],target = 9
因为nums[0] + nums[1] = 2 + 7 = 9
所以返回[0,1]

解题思路
把nums想象成相亲者
把target想象成匹配条件
用字典建立一个婚姻介绍所,存储相亲者的数字和下标
解题步骤
新建一个字典作为婚姻介绍所
nums里的值,逐个来介绍所找对象,没有合适的就先登记着,有合适的就牵手成功


时间复杂度O(n),空间复杂度O(n),空间复杂度可以做得更好,可以时间换空间

LeetCode:3.无重复字符的最长子串


解题思路
先找出所有的不包含重复字符的子串
找出长度最大那个子串,返回其长度即可
解题步骤
用双指针维护一个滑动窗口,用来剪切子串
不断移动右指针,遇到重复字符,就把左指针移动到重复字符的下一位
过程中,记录所有窗口的长度,并返回最大值

时间复杂度O(n),空间复杂度:O(m),m是字符串中不重复字符的个数

LeetCode:76.最小覆盖子串


解题思路
先找出所有包含T的子串
找出长度最小那个子串,返回即可
解题步骤
用双指针维护一个滑动窗口
移动右指针,找到包含T的子串,移动左指针,尽量减少包含T的子串的长度
循环上述过程,找出包含T的最小子串

时间复杂度:O(m+n),m是t的长度,n是s的长度
空间复杂度:O(m),m是t里不同字符的个数

思考题

1、在你的实际工作中使用字典完成一次映射操作
2、请用 Chrome 的 Profile 工具或其他任意前端性能测试工具,测试 Map 和 Object 频繁增删操作的性能,谁高谁低?

(七)数据结构之“字典”相关推荐

  1. Python学习第七课-元组字典集合

    Python学习第七课-元组&字典&集合 一.元组 1.1元组简介 1.2元组的拆包 1.3字符串拆包 1.4列表的拆包 1.5拆包练习 二.字典的简介 2.1介绍 2.2操作 三.字 ...

  2. python 字典_Python数据结构:字典那些事儿

    写在前面 本系列适合0基础的人食用,这是利用Excel学习Python系列的第5篇文章 之前的列表都复习好了吗:python数据结构:列表 are u ready?另一种数据结构:字典,要来了 字典( ...

  3. sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)

    sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map) 这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之 ...

  4. JavaScript数据结构之字典和散列表

    JavaScript数据结构之字典和散列表 集合.字典和散列表可以存储不重复的值.在字典中,我们用[键,值]的形式来存储数据.在散列表中也是一样(也是以[键,值]对的形式来存储数据) 字典 集合表示一 ...

  5. python 映射表结构_Python 中常见的数据结构:字典、映射和散列表

    在 Python 中,字典是核心数据结构.字典可以存储任意数量的对象,每个对象都由唯一的字典键标识. 字典通常也被称为映射.散列表.查找表或关联数组.字典能够高效查找.插入和删除任何与给定键关联的对象 ...

  6. Redis数据结构:字典(hash表)

    使用场景: # set person name "tom" # set person name "jerry" 1. 字典结构: 哈希表数据结构typedef ...

  7. 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)

    1. 数据结构 1.1 字典 dictht 是一个散列表结构,使用拉链法保存哈希冲突的 dictEntry /* This is our hash table structure. Every dic ...

  8. javascript map 排序_数据结构-JavaScript字典结构的编程实现

    字典是一类特殊的数据元素的集合,字典的基本单元为数对,所谓数对是指类似(key,value)形式的数据.每一个数对结构包括了关键字key与该元素对应的value值,在一个普通字典所组成的数对集合中,关 ...

  9. redis——数据结构(字典、链表、字符串)

    1 字符串 redis并未使用传统的c语言字符串表示,它自己构建了一种简单的动态字符串抽象类型. 在redis里,c语言字符串只会作为字符串字面量出现,用在无需修改的地方. 当需要一个可以被修改的字符 ...

最新文章

  1. 以太坊RLP机制分析
  2. [转] 利用jemalloc分析内存泄漏
  3. LA4234 Binary Clock(进制转换)
  4. linux runable进程查询,关于Linux下进程的详解【进程查看与管理】
  5. [当人工智能遇上安全] 7.基于机器学习的安全数据集总结
  6. python函数参数那些事,关键字参数与位置参数
  7. Java-进阶:Java-File--IO—1
  8. Ubuntu 配置 Tomcat
  9. linux 和 windows usb插拔侦测
  10. 看完上汽制动的数字化,才发现以前的数据可视化大屏都白做了
  11. python读取中文txt操作 转化为拼音
  12. MIMO-OTFS in High-Doppler Fading Channels:Signal Detection and Channel Estimation(2)
  13. 申请Apple ID--通过苹果官网申请
  14. 【黑金原创教程】【TimeQuest】【第五章】网表质量与外部模型
  15. Unit 2, TCP header recap
  16. 狂神Docker笔记之:Docker的常用命令
  17. 纯css修改图标颜色的五种方式
  18. 冰山一角,管窥中国互联网的地下世界
  19. 3500x架构_R5 3500X怎么样
  20. 基于微信小程序的学生选课系统

热门文章

  1. pix2pix 学习笔记
  2. Linux系统常用目录操作函数
  3. HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
  4. Java多线程(七)之同步器基础:AQS框架深入分析
  5. LeetCode 之 JavaScript 解答第141题 —— 环形链表 I(Linked List Cycle I)
  6. java动态代理实现与原理详细分析(代码层面解释了AOP的实现)
  7. 2019.01.19-2018年6月NEYC集训sequence
  8. 46 道阿里巴巴 Java 面试题,你会几道?
  9. FreeMarker缓存处理
  10. IOS初级:UIScrollView UIPageControl