第7章 “字典”

news/2024/5/8 0:12:40/文章来源:https://blog.csdn.net/weixin_38245947/article/details/130386817

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 trueif(left === '{' && right === '}') return trueif(left === '[' && right === ']') return truereturn false
}const isVlaid = function (s) {// 判断s的字符传长度是否为奇数if (s.length % 2 === 1) return falseconst 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 - nif (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 = 0const 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.luyixian.cn/news_show_104139.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费ChatGPT接入网站-网站加入CHATGPT自动生成关键词文章排名

网站怎么接入chatGPT 要将ChatGPT集成到您的网站中&#xff0c;需要进行以下步骤&#xff1a; 注册一个OpenAI账户&#xff1a;访问OpenAI网站并创建一个账户。这将提供访问API密钥所需的身份验证凭据。 获取API密钥&#xff1a;在您的OpenAI控制台中&#xff0c;您可以找到您…

OSCP-Nickel(爆破pdf、本地http提权)

目录 扫描 HTTP 提权 扫描 FileZilla不接受匿名FTP登录。 端口21上的SSH和3389上的RDP很少是初始入口点,但是如果遇到一些凭据,可以记住这一点。 HTTP 打开Web浏览器并导航到端口8089和3333,用于的HTTP服务器。端口8089似乎是某种类型的开发环境。 单击一个按钮重定向到…

Tomcat 配置与部署

http 协议就是 http 客户端和 http 服务器之间通信的协议 , 而Tomcat 就是 java 圈子中最广泛使用的 http 服务器. 下载Tomcat Tomcat官网 Tomcat 的版本 , 和后续的 servlet 版本是强相关的 , 此处使用 tomcat 8 , 对应的 servlet 就是 3.1 下载一个 zip 压缩包解压缩即可 T…

输入 jupyter notebook 报错 ModuleNotFoundError: No module named ‘pysqlite2‘ 解决方案

今天在cmd命令行中输入jupyter notebook想要打开jupyter时&#xff0c;出现了以下问题&#xff1a;即找不到模块‘pysqlite2’。 找到出问题的文件“sessionmanager.py”&#xff0c;发现出问题的地方在于&#xff1a;尝试导入sqlite3没有导致失败 因此&#xff0c;以下是解决…

java反转字符串的方法

1、首先我们定义一个方法&#xff0c;用来反转字符串。用 public static void &#xff08;String&#xff09;方法初始化一个对象&#xff0c;然后使用 private static &#xff08;&#xff09;方法对该对象进行初始化&#xff0c;并检查是否有某个字符串和字符串本身相同&am…

复现Nginx 解析漏洞

目录 漏洞原理 漏洞复现 编译环境 制作图片马 一&#xff1a;随便弄一张图片 二&#xff1a;准备写一个.php文件&#xff0c;写上木马 三&#xff1a;合成图片马 上传图片马 修复漏洞 漏洞原理 1、 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fast…

科大讯飞版ChatGPT开始内测《讯飞星火》

科大讯飞版ChatGPT产品&#xff0c;提前交卷了&#xff01; 就在昨夜&#xff0c;讯飞骤然向开发者提供了内测通道&#xff0c;取名为讯飞星火认知大模型对外开启内测。 还有个神奇的英文名字Spark Desk&#xff0c;据说有“火花桌面智能助手”的意思。 申请的过程很简单。用…

leetcode21 - - 合并两个有序链表

文章目录 1.题目描述2.解题思路方法1&#xff1a;方法2&#xff1a; 1.题目描述 题目链接&#xff1a;力扣21&#xff0c;合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2.解题思路 方法1&#xff1a;…

Docker安装mysql8.0文档

第一步需要安装Docker基础环境&#xff0c;具体可以看看这篇 docker基础篇 第二步&#xff0c;拉取mysql8.0的镜像 docker pull mysql:8.0 第三步&#xff0c;镜像启动和文件挂载 复制下面命令执行&#xff0c;33006是对外访问暴露的端口&#xff0c;当然你也可以设置为3306…

这个假期有这些游戏就不怕无聊了

1、塞尔达传说旷野之息 Switch端的优秀游戏体验不容错过&#xff01; 人气王《塞尔达传说》&#xff01; 被玩家誉为“唯一让人长大后有种回到童年的感觉的作品”。 豆瓣网友写道&#xff1a;“在雨夜&#xff0c;我在寺庙里看到了一条白龙划过天空&#xff0c;在岩壁上看到了…

SpringBoot拦截器的使用

Hi I’m Shendi SpringBoot拦截器的使用 简介 最近要实现一个全局对象的传递&#xff0c;在接口中直接通过增加函数参数来直接使用的这种方式 之前一直使用的是过滤器&#xff0c;但这种需求过滤器是没有办法实现的&#xff0c;过滤器可以给请求注入字符串&#xff0c;但不能…

JavaEE初阶学习:初识网络

1.网络发展史 1.独立模式 独立模式:计算机之间相互独立&#xff1b; 2.网络互连 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同工作来完成业务&#xff0c;就有了网络互连。 网络互连&#xff1a;将多…

yolov5半自动打标签(opencv版本),识别目标画框并将坐标信息保存在xml中

文章目录 1.yolov5预训练模型推理2. opencv边缘检测结果展示 yolov5训练数据集时&#xff0c;需要对数据进行打标签&#xff0c;可以通过两种方法进行半自动化打标签。 1.yolov5预训练模型推理 yolov5预训练模型&#xff1a;将待打标签的图片输入预训练模型中进行推理&#xf…

深入分析,Redis为什么这么快?

我们都知道Redis很快&#xff0c;它QPS可达10万&#xff08;每秒请求数&#xff09; Redis为什么这么快&#xff1f; 基于内存实现高效的数据结构合理的数据编码合理的线程模型虚拟内存机制 基于内存实现 我们都知道内存读写是比磁盘读写快很多的。Redis是基于内存存储实现的…

除了Figma,再给你介绍10款好用的协同设计软件

组织结构越来越复杂&#xff0c;团队中的每个人都有独特的技能、经验和专业知识。我们怎样才能让团队更好地合作&#xff1f;在这种情况下&#xff0c;协同设计应运而生。 UI的未来是协同设计&#xff01;如果你想把握未来的设计趋势&#xff0c;不妨从使用高效的协同设计软件…

Figma导出源文件的方法,用这个方法快速转换其它格式

市场上设计工具层出不穷&#xff0c;Sketch、AdobeXD、Axure、InVision、Figma、Pixso等都是优秀的设计工具&#xff0c;设计师经常面临如何从设计工具中导出文件的问题。 Figma软件的导出功能非常强大&#xff0c;因为轻量化体验受到很多设计师的喜爱。如何保存导出Figma源文…

一键免费部署你的私人 ChatGPT 网页应用

主要功能 在 1 分钟内使用 Vercel &#xff08;https://vercel.com/&#xff09;免费一键部署精心设计的 UI&#xff0c;响应式设计&#xff0c;支持深色模式极快的首屏加载速度&#xff08;~100kb&#xff09;海量的内置 prompt 列表&#xff0c;来自中文和英文自动压缩上下文…

【JavaScript】new命令精华总结

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

C++入门基础知识[博客园长期更新......]

0.博客园链接 博客的最新内容都在博客园当中&#xff0c;所有内容均为原创(博客园、CSDN同步更新)。 C知识点集合 1.命名空间 在往后的C编程中&#xff0c;将会存在大量的变量和函数&#xff0c;因为有大量的变量和函数&#xff0c;所以C的库会非常多。那么在C语言编程中&a…

mysql数据库自动备份

前言 服务器中数据库的数据是最重要的东西,如果因为某些情况导致数据库数据错误,数据错乱或数据库崩溃,这时一定要及时的修复,但如果数据丢失或数据没法用了,这时就要回滚数据了,而这时就需要我们经常的备份数据库的数据 正文 一般别人都会推荐使用Navicat来备份和连接数据库…