第7章 “字典”

news2024/9/22 6:39:42

1.字典简介

  1. 字典是什么?
    解答:与集合类似,也是一种存储唯一值的数据结构,但它是以键值对的形式来存储。(键值对是最重要的特性)
  2. 在Es6中新增了字典,名为Map
  3. 字典的常用操作:增删改查
const map = new Map()


// 新增
map.set('a', 'aa')
map.set('b', 'bb')
map.set('c', 'cb')


// 删除
map.delete('a')

// 清空
// map.clear()

// 改
map.set('b', 'bbb')

// 查 (get方法读取key对应的键值,如果找不到key,返回undefined。)
map.get('a')

// has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
map.has('a')
遍历方法
Map 结构原生提供三个遍历器生成函数和一个遍历方法。

Map.prototype.keys():返回键名的遍历器。
Map.prototype.values():返回键值的遍历器。
Map.prototype.entries():返回所有成员的遍历器。
Map.prototype.forEach():遍历 Map 的所有成员。

leetCode: 349.两个数组的交集

请添加图片描述

请添加图片描述

var intersection = function (nums1, nums2) {
	var map = new Map()
	nums.forEach(item => {
		map.set(item, true)
	})
	const res = []
	nums2.forEach(n => {
		if (map.get(n)) {
			res.push(n)
			// 找到之后需要从字段中删除,目的:为了防止数据重复
			map.delete(n)
		}
	})
	return res
}

时间复杂度:nums1 + nums2
空间复杂度:字典的空间复杂度 O(m)

leetCode: 20.有效的括号

优化

function leftEqualRight = function (left, right) {
	if(left === '(' && right === ')') return true
	if(left === '{' && right === '}') return true
	if(left === '[' && right === ']') return true
	return false
}


const isVlaid = function (s) {
	// 判断s的字符传长度是否为奇数
	if (s.length % 2 === 1) return false
	const stack = []
	
	// 创建字典
	const map = new Map()
	map.set('(', ')')
	map.set('[', ']')
	map.set('{', '}')

	for (var i = 0; i < s.length; i++) {
		const c = s[i]
		if (map.has(c)) {
			stack.push(c)
		} else {
			const t = stack[stack.length - 1]
			if (map.get(t) === c) {
				stack.pop()
			} else {
				return false
			}
		}
	}
	return stack.length === 0
}

时间复杂度:o(n)
空间复杂度:o(n)

leetCode1.两数之和

给定一个数组nums,和一个目标值target,请你在该数组中找出和为目标值的那2个整数,,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,但是,数组中同一个元素不能使用2遍。
例如:nums = [2,7,11,15], target = 9
因为:nums[0] + nums[1] = 2 + 7 = 9
所以返回:[0, 1]
请添加图片描述

请添加图片描述

const twoSum = function (nums, target) {
	const map = new Map()
	for (let i = 0; i < nums.length;i++) {
		const n = nums[i]
		const n2 = target - n
		
		if (map.has(n2)) {
			return [map.get(n2), i]
		} else {
			map.set(n, i)
		}
	}
}


时间复杂度:O(n)
空间复杂度:O(n) * 3

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

给定一个字符串,找出其中不含有重复字符的最长子串的长度。
例如:‘abcabcbb’, 输出3,解释:因为无重复字符的最长子串是‘abc’,所以其长度是3

请添加图片描述
请添加图片描述

所谓的双指针:其实就是2个变量,用变量来记录剪切子串的起始位置。
过程:两个指针分别叫左指针,右指针,在下标为0的位置,先移动右指针,右指针每移动一位就和左指针对比一下看是否相等,如果不相等,右指针继续移动,如果相等,则左指针移动到重复字符的下一位。这样就可以保证所有的子串都是不包含重复字符的。在移动过程中记录所有子串的长度。

var maxlength = function(s) {
	// 左指针
	let l = 0
	
	// 右指针需要不断移动,因此写个循环,在遍历的过程中不断的记录右指针
	let res = 0
	
	
	const map = {}
	for (let i = 0; i < s.length; i++) {
		// 如果遇到重复字符
		if (map.has(s[i]) && map.get(s[i] >= l)) {
			// 左指针则向下移动一位
			l = map.get(s[i]) + 1
		}
		res = Math.max(res, r - l + 1)
		map.set(s[r], i)
	}

}
时间复杂度:O(n)
空间复杂度:O(m) m :不重复字符的个数

leetCode: 76.最小覆盖子串?

给你一个字符串s,一个字符串t,请在字符串s里面找出:包含t所有字符串的最小子串。
例如:s=“ADDBECODEBANC” , t=“ABC”
输出:“BANC”

如果s中不存在,则返回"",

如果存在,则要保证它是唯一的答案。
请添加图片描述

const minWindow = function (s, t) {
	// 左指针
	let l = 0
	// 右指针
	let r = 0
	
	// 创建字典,里面包含需要的字符和长度
	const  need = new Map()
	for (let c of t) {
		need.set(c, need.has(c) ? need.get(c) + 1 : 1)
	}
	
	// 使用循环移动右指针的位置
	while(r < s.length) {
		const c = s[r]
		if (need.has(c)) {
			need.set(c, need.get(c) - 1)
		}
		r += 1
	}
}

总结

  1. 与集合类似,也是一种存储唯一值的数据结构,但它是以键值对的形式来存储。(键值对是最重要的特性)
  2. 在Es6中新增了字典,名为Map
  3. 字典的常用操作:键值对的增删改查

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/465393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用PY003基于外部中断+定时器的方式实现NEC红外解码

写在前边 最近项目用到一款遥控器是38K红外载波,NEC协议的&#xff0c;找了很多帖子有看到用外部中断下降沿判断&#xff08;但可惜判定数据的方式是while在外部中断里面死等的&#xff09;&#xff0c;有看到用100us定时器定时刷来判断&#xff0c;感觉都不太适合用在我这个工…

基于MATLAB实现WSN(无线传感器网络)的LEACH(低能耗自适应集群层次结构)(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 低能耗自适应集群层次结构&#xff08;“LEACH”&#xff09;是一种基于 TDMA 的 MAC 协议&#xff0c;它与无线传感器网络 &a…

[2018.09.25][Sourceinsight]4.0配置

1 字体放大 (1)panel fonts: option,preference,colors&font (2)code fonts: option,file type options 2 修改默认字体 Alt y 3 显示行号 点击菜单栏View->Line Numbers 4 破解 https://blog.csdn.net/biubiuibiu/article/details/78044232 5 全局搜索字…

在Spring Boot微服务使用knife4j发布后端API接口

记录&#xff1a;422 场景&#xff1a;在Spring Boot微服务上&#xff0c;应用knife4j发布后端API接口&#xff0c;辅助开发与调试。 版本&#xff1a;JDK 1.8,Spring Boot 2.6.3,knife4j-3.0.3,springfox-swagger2-3.0.0。 Knife4j: 是一个集Swagger2 和 OpenAPI3为一体的增…

第三十二篇,记一次Windows下Qt使用boost的经历

Win10系统 Qt版本如下所示 Qt中使用的编译器是MinGW&#xff0c;如下图 boost版本是1.82.0 好的&#xff0c;描述一下过程&#xff1a; 按这个教程下载、编译boost&#xff0c;在boost的目录下生成了stage/lib/目录&#xff0c;然后加入到Qt工程里&#xff0c;主要是include目…

win10安装Anaconda,配置Pytorch环境

一、安装Anaconda Anaconda实际上是一个包管理器&#xff0c;可以理解为一个工具。Anaconda自带Python&#xff08;选中版本&#xff09;解释器以及其他一些数据分析与挖掘需要的模块而无需用户手动添加这些常用模块&#xff08;安装模块会出现各种错误&#xff09;。早期学Pyt…

Django个性化推荐系统,以电影为例

背景 随着科学技术发展&#xff0c;电脑已成为人们生活中必不可少的生活办公工具&#xff0c;在这样的背景下&#xff0c;网络技术被应用到各个方面&#xff0c;为了提高办公生活效率&#xff0c;网络信息技术飞速发展。在这样的背景下人类社会进入了全新的信息化的时代。电影…

flask+opencv:实时视频直播推流平台Demo

简介&#xff1a;推流&#xff0c;指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。网上调查、对话访谈、在线培训等内容现场发布到互联网上。利用互联网的直观、快速&#xff0c;表现形式好、内容丰富、交互性强、地域不受限制、受…

华为OD机试真题(Java),猴子爬山(100%通过+复盘思路)

一、题目描述 一天一只顽猴想去从山脚爬到山顶&#xff0c;途中经过一个有个N个台阶的阶梯&#xff0c;但是这猴子有一个习惯&#xff1a; 每一次只能跳1步或跳3步&#xff0c;试问猴子通过这个阶梯有多少种不同的跳跃方式&#xff1f; 二、输入描述 输入只有一个整数N&…

AI语音生成器是下一大安全威胁吗?

ChatGPT一经上市&#xff0c;有关监管人工智能的讨论就开始升温。任何试图遏制这种技术的做法都可能需要国际合作&#xff0c;需要我们在过去几十年来从未见过的合作程度&#xff0c;因此不太可能遏制人工智能。 人工智能是一项功能强大的技术&#xff0c;有望彻底改变我们生活…

AIGC - 生产力新工具 Bito AI

文章目录 Bito AI 是什么Bito AI 能干啥官网免费的吗&#xff1f;如何使用 Bito方式一&#xff1a;方式二&#xff1a;在这里插入图片描述方式三 Bito AI 是什么 Bito AI是继Github Copilot、Cursor、CodeWhisperer等AI智能编程产品之后发了一大AI编程工具 。 Bito是一款建立…

表情迁移 - 2D人像动起来(附带生成web服务提供api接口)

左边原图,右边是渲染后的视频文件 开源地址:https://github.com/AliaksandrSiarohin/first-order-model 官方模型下载地址(需科学上网): google-driveyandex-disk本文docker容器已自带人脸模型 若还需要行为、物品、动画等追踪模型需下载后拷贝至容器内即可使用 API请求…

Android之 Camera相机使用

一 简介 1.1 随着信息时代的发展&#xff0c;相机在我们生活中使用越来越频繁&#xff0c;也成为手机的基本配置之一。相机可以用来拍照&#xff0c;拍视频&#xff0c;人脸识别&#xff0c;视频聊天&#xff0c;扫码支付&#xff0c;监控等常见领域 不管什么场景&#xff0c…

DolphinScheduler 2.0.5详解

文章目录 第一章 DolphinScheduler介绍1.1 关于DolphinScheduler1.2 DolphinScheduler特性1.3 配置建议1.3.1 Linux 操作系统版本要求1.3.2 服务器建议配置1.3.3 生产环境1.3.4 网络要求1.3.5 客户端 Web 浏览器要求 第二章 DolphinScheduler安装部署2.1 安装部署介绍2.2 单机版…

Mybatis笔记分享【狂神说java】

MyBatis 1、简介 1.1什么是MyBatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL、存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;…

Windows环境下使用Internet Information Service( IIS)管理器上搭建Web资源网站

一、业务需求 在项目的开发过程中,需要将指定文件夹发布称为一个网站,可以通过网页查看该文件夹下的内容和子目录(及其子目录内容);同时也可以将内容上传到该文件夹中,方便他人使用,如下图所示: 二、思路分析 将文件夹发布为网站,可以使用Windows的IIS管理器搭建一个W…

Scala之模式匹配与隐式转换

目录 模式匹配&#xff1a; 基础语法如下&#xff1a; 模式守卫&#xff1a; 类型匹配&#xff1a; 对象匹配 样例类&#xff1a; 偏函数&#xff1a; 偏函数的化简写法&#xff1a; 偏函数的使用&#xff1a; 隐式转换&#xff1a; 官方定义&#xff1a; 个人理解&…

(小甲鱼python)文件永久存储(下)总结 文件处理with语句和上下文管理器、pickle模块详解

一、基础复习 上节课回顾&#xff1a; 1.文件永久存储(上) python文件永久存储(创建打开文件、文件对象的各种方法及含义) 2.文件永久存储(中)总结 路径处理 pathlib–面向对象的文件系统路径 绝对路径vs相对路径&#xff08;路径查询、路径修改、查找功能&#xff09; 二、文…

【JavaScript】new命令精华总结

相关概念 对象是什么? 1.对象是单个实物的抽象 2.对象是一个容器&#xff0c;封装了属性和方法 属性是对象的状态&#xff0c;方法是对象的行为&#xff0c;把对象中的函数一般称为方法 构造函数 专门用来生成实例对象的函数&#xff0c;是对象的模板&#xff0c;第一个字…

vue2数据响应式原理(7) 收集依赖,用get和set叙述出最基础的至高vue哲学

收集依赖在整个数据响应式中算是比较难的 首先 要理解这里所指的依赖 依赖 可能vue项目做多了就会想到 npm i 但其实跟这个是没有什么关系的 我们这里所指的依赖 是用到数据的地方 什么地方用到数据 什么地方就是依赖 简单说 就是依赖这个响应式数据 首先 我们看一下 vue1 和…