(七)数据结构之“字典”
数据结构之“字典”
- 字典是什么?
- 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 频繁增删操作的性能,谁高谁低?
(七)数据结构之“字典”相关推荐
- Python学习第七课-元组字典集合
Python学习第七课-元组&字典&集合 一.元组 1.1元组简介 1.2元组的拆包 1.3字符串拆包 1.4列表的拆包 1.5拆包练习 二.字典的简介 2.1介绍 2.2操作 三.字 ...
- python 字典_Python数据结构:字典那些事儿
写在前面 本系列适合0基础的人食用,这是利用Excel学习Python系列的第5篇文章 之前的列表都复习好了吗:python数据结构:列表 are u ready?另一种数据结构:字典,要来了 字典( ...
- sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)
sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map) 这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之 ...
- JavaScript数据结构之字典和散列表
JavaScript数据结构之字典和散列表 集合.字典和散列表可以存储不重复的值.在字典中,我们用[键,值]的形式来存储数据.在散列表中也是一样(也是以[键,值]对的形式来存储数据) 字典 集合表示一 ...
- python 映射表结构_Python 中常见的数据结构:字典、映射和散列表
在 Python 中,字典是核心数据结构.字典可以存储任意数量的对象,每个对象都由唯一的字典键标识. 字典通常也被称为映射.散列表.查找表或关联数组.字典能够高效查找.插入和删除任何与给定键关联的对象 ...
- Redis数据结构:字典(hash表)
使用场景: # set person name "tom" # set person name "jerry" 1. 字典结构: 哈希表数据结构typedef ...
- 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)
1. 数据结构 1.1 字典 dictht 是一个散列表结构,使用拉链法保存哈希冲突的 dictEntry /* This is our hash table structure. Every dic ...
- javascript map 排序_数据结构-JavaScript字典结构的编程实现
字典是一类特殊的数据元素的集合,字典的基本单元为数对,所谓数对是指类似(key,value)形式的数据.每一个数对结构包括了关键字key与该元素对应的value值,在一个普通字典所组成的数对集合中,关 ...
- redis——数据结构(字典、链表、字符串)
1 字符串 redis并未使用传统的c语言字符串表示,它自己构建了一种简单的动态字符串抽象类型. 在redis里,c语言字符串只会作为字符串字面量出现,用在无需修改的地方. 当需要一个可以被修改的字符 ...
最新文章
- 以太坊RLP机制分析
- [转] 利用jemalloc分析内存泄漏
- LA4234 Binary Clock(进制转换)
- linux runable进程查询,关于Linux下进程的详解【进程查看与管理】
- [当人工智能遇上安全] 7.基于机器学习的安全数据集总结
- python函数参数那些事,关键字参数与位置参数
- Java-进阶:Java-File--IO—1
- Ubuntu 配置 Tomcat
- linux 和 windows usb插拔侦测
- 看完上汽制动的数字化,才发现以前的数据可视化大屏都白做了
- python读取中文txt操作 转化为拼音
- MIMO-OTFS in High-Doppler Fading Channels:Signal Detection and Channel Estimation(2)
- 申请Apple ID--通过苹果官网申请
- 【黑金原创教程】【TimeQuest】【第五章】网表质量与外部模型
- Unit 2, TCP header recap
- 狂神Docker笔记之:Docker的常用命令
- 纯css修改图标颜色的五种方式
- 冰山一角,管窥中国互联网的地下世界
- 3500x架构_R5 3500X怎么样
- 基于微信小程序的学生选课系统
热门文章
- pix2pix 学习笔记
- Linux系统常用目录操作函数
- HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
- Java多线程(七)之同步器基础:AQS框架深入分析
- LeetCode 之 JavaScript 解答第141题 —— 环形链表 I(Linked List Cycle I)
- java动态代理实现与原理详细分析(代码层面解释了AOP的实现)
- 2019.01.19-2018年6月NEYC集训sequence
- 46 道阿里巴巴 Java 面试题,你会几道?
- FreeMarker缓存处理
- IOS初级:UIScrollView UIPageControl