js实现数据结构

常见的数据结构

数组

  • 创建数组
    数组字面量[],new Array().fill()
    二维数组,两层循环创建

  • 头部添加unshift
    尾部添加push
    任意位置添加 splice(index,0,item)

  • 头部删除 shift
    尾部删除pop
    任意位置删除splice(index,num)

先进后出
push,pop

队列

先进先出
push,shift

链表

class Node{constructor(val){this.val=val;this.next=null;}
}
  • 添加元素
cur.next = pre.next
pre.next = cur.next
  • 删除元素
pre.next = cur.next

二叉树

class TreeNode(){constructor(val){this.val=val;this.left=null;this.right=null;}
}
  • 遍历
    先序遍历,中序遍历,后序遍历

数组应用

map

空间换时间 – map
1. 两数之和 - 力扣(LeetCode)

双指针

有序 数组 对撞指针

88. 合并两个有序数组 - 力扣(LeetCode)
15. 三数之和 - 力扣(LeetCode)

字符串的应用

  • 反转字符串
    str.split("").reverse().join("")
  • 判断是否是回文字符串
    `str == str.split(“”).reverse().join(“”)

回文字符串

对称 + 双指针
LCR 019. 验证回文串 II - 力扣(LeetCode)

字符串匹配

  class WordDictionary{constructor(){this.words={}}//addaddWord(word){if(this.words[word.length]){this.words[word.length].push(word)}else{this.words[word.length] = [word]}}//searchsearch(word){if(!this.words[word.length]){return false;}const len = word.length;//不包含.,则是普通字符if(!word.includes(".")){return this.words[len].includes(word);}//包含.则是正则表达式const reg = new RegExp(word);return this.words[len].some((item) => reg.test(item));}}

正则表达式

test 是否匹配成功
match 获取捕获结果

/*** 实现一个atoi函数,使其能将字符串转换成整数*/function atoi(str){//去除空格const reg = /\s*([-\+]?[0-9]*).*///得到捕获组const groups = str.match(reg);//最大值const max = Math.pow(2,31) - 1;//最小值const min = -Math.pow(2,31);//存储转化出来的数字let targetNum = 0;if(groups){targetNum = parseInt(groups[1]);if(isNaN(targetNum)){targetNum =  0;}}if(targetNum > max){return max;}if(targetNum < min){return min;}return targetNum;}

链表应用

链表处理

哑节点
dummy = new ListNode() dummy.next = head

21. 合并两个有序链表 - 力扣(LeetCode)
83. 删除排序链表中的重复元素 - 力扣(LeetCode)
82. 删除排序链表中的重复元素 II - 力扣(LeetCode)

链表的反转

一次遍历 快慢指针
LCR 021. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

206. 反转链表 - 力扣(LeetCode)

链表成环

设置flag

141. 环形链表 - 力扣(LeetCode)
142. 环形链表 II - 力扣(LeetCode)

栈与队列

括号问题

20. 有效的括号 - 力扣(LeetCode)

每日温度

739. 每日温度 - 力扣(LeetCode)

最小栈

155. 最小栈 - 力扣(LeetCode)

用栈实现队列

232. 用栈实现队列 - 力扣(LeetCode)

滑动窗口

双端队列,头尾皆可进行删除添加
239. 滑动窗口最大值 - 力扣(LeetCode)

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

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

相关文章

数据分析 基础定义

一、大数据的定义 数据分析是基于商业等目的&#xff0c;有目的的进行收集、整理、加工和分析数据&#xff0c;提炼有价值信息的过程。 大数据分析即针对海量的、多样化的数据集合的分析 大数据分析是一种利用大规模数据集进行分析和挖掘知识的方法。随着互联网、社交媒体、移动…

数据库高可用方案-04-删除策略

数据库数据高可用系列 数据库高可用方案-01-数据库备份还原方案 数据库高可用方案-02-多机房部署 数据库高可用方案-03-主备等高可用架构 数据库高可用方案-04-删除策略 数据库高可用方案-05-备份与恢复 数据库高可用方案-06-监控与报警 数据库高可用方案-07-一致性校验…

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器&#xff0c;以及多次连接后黑屏的问题。 安装 rdp 服务&#xff1a; yum install -y epel-release yum install -y xrdp或者如下&#xff1a; 可以通过下载rpm软件包&#xff0c;然后rpm方式安装。访问xrdp官网https…

python正则训练。

在PythonTip&#xff0c;我们总是想要了解我们每天有多受欢迎&#xff0c;并从流行的网站上抓取了对话。 每个对话都占据1行&#xff0c;总共有 N 个这样的对话。每个对话中最多有1个单词说"pythontip"&#xff08;全部小写&#xff09;。我们希望你帮助我们确定一个…

OpenAI-Edge-TTS的使用

OpenAI-Edge-TTS的使用相对简单,以下是具体步骤: 一、安装首先,你需要通过Python包管理工具pip来安装Edge-TTS库。在命令行中输入以下命令:【bash】 pip install edge-tts如果想使用edge-tts和edge-playback命令,最好使用pipx。二、基本使用安装完成后,你就可以开始使用E…

Maven多环境打包方法配置

简单记录一下SpringBoot多环境打包配置方法&#xff0c;分部署环境和是否包含lib依赖包两个维度 目录 一、需求说明二、目录结构三、配置方案四、验证示例 一、需求说明 基于Spring Boot框架的项目分开发&#xff0c;测试&#xff0c;生产等编译部署环境&#xff08;每一个环境…

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…

阳振坤:AI 大模型的基础是数据,AI越发达,数据库价值越大

2024年1月12日&#xff0c;第四届OceanBase数据库大赛决赛在北京圆满落幕。在大赛的颁奖典礼上&#xff0c;OceanBase 首席科学家阳振坤老师为同学们献上了一场主题为“爱上数据库”的公开课&#xff0c;他不仅分享了个人的成长历程&#xff0c;还阐述了对数据库行业现状与未来…

2.1.3 第一个工程,点灯!

新建工程 点击菜单栏左上角,新建工程或者选择“文件”-“新建工程”,选择工程类型“标准工程”选择设备类型和编程语言,并指定工程文件名及保存路径,如下图所示: 选择工程类型为“标准工程” 选择主模块机型; 选择熟悉的编程语言; 填写工程名,选择存放路径; 确定。 编…

Chrome谷歌浏览器如何能恢复到之前的旧版本

升级了谷歌最新版不习惯&#xff0c;如何降级版本 未完待续。。 电脑中的Chrome谷歌浏览器升级到了最新版本&#xff0c;但是有种种的不适应&#xff0c;如何能恢复到之前的旧版本呢&#xff1f;我们来看看操作步骤&#xff0c;而且无需卸载重装。 怎么恢复Chrome 之前版本&a…

IO进程----进程

进程 什么是进程 进程和程序的区别 概念&#xff1a; 程序&#xff1a;编译好的可执行文件 存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 程序是静态的&#xff0c;没有任何执行的概念 进程&#xff1a;一个独立的可调度的任务 执行一个程序分配资…

PHP语言的数据库交互

PHP语言的数据库交互 引言 在现代Web开发中&#xff0c;数据库是存储和管理应用数据的重要组成部分。随着互联网的快速发展&#xff0c;网站和应用程序对数据存储和操作的需求变得越来越复杂。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;提供了多种数据库交互的方法&…

npm操作大全:从入门到精通

引言 在现代前端开发中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是不可或缺的工具。无论是安装依赖、管理项目&#xff0c;还是发布自己的包&#xff0c;npm都扮演着重要的角色。本文将带你从npm的基础操作开始&#xff0c;逐步深入到高级用法&#xff0c…

LabVIEW处理复杂系统和数据处理

LabVIEW 是一个图形化编程平台&#xff0c;广泛应用于自动化控制、数据采集、信号处理、仪器控制等复杂系统的开发。它的图形化界面使得开发人员能够直观地设计系统和算法&#xff0c;尤其适合处理需要实时数据分析、高精度控制和复杂硬件集成的应用场景。LabVIEW 提供丰富的库…

部署Metricbeat监测ES

官方参考文档 安装Metricbeat curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.17.27-linux-x86_64.tar.gztar xzvf metricbeat-7.17.27-linux-x86_64.tar.gz设置 Metricbeat连接到 Elasticsearch 进入metricbeat目录配置metricbeat.yml …

高效安全文件传输新选择!群晖NAS如何实现无公网IP下的SFTP远程连接

文章目录 前言1. 开启群晖SFTP连接2. 群晖安装Cpolar工具3. 创建SFTP公网地址4. 群晖SFTP远程连接5. 固定SFTP公网地址6. SFTP固定地址连接 前言 随着远程办公和数据共享成为新常态&#xff0c;如何高效且安全地管理和传输文件成为了许多人的痛点。如果你正在寻找一个解决方案…

为医院量身定制做“旧改”| 全视通物联网智慧病房

随着经济工作会议、卫生健康工作会议、“经济高质量发展成效”系列新闻发布会的依次召开&#xff0c;强基工程、三明医改、儿科和精神卫生服务年、中医药传承创新发展、促进生育、养老服务改革、病房改造提升行动...等关键词正成为新的热点&#xff0c;2025年卫生健康工作面临一…

PHP同城配送小程序

&#x1f680; 同城极速达——您生活中的极速配送大师 &#x1f4f1; 一款专为现代都市快节奏生活量身打造的同城配送小程序&#xff0c;同城极速达&#xff0c;集高效、便捷、智能于一身&#xff0c;依托ThinkPHPGatewayWorkerUniapp的强大架构&#xff0c;巧妙融合用户端、骑…

ipad和macbook同步zotero文献附件失败的解决办法

背景&#xff1a;我所有的文献及其附件pdf都是在台式机&#xff08;windows系统&#xff09;&#xff0c;想要把这些文献同步到云上&#xff0c;然后再从云上同步到平板和其他笔记本电脑比如macbook。文献同步虽已成功&#xff0c;但文献附件都无法打开。 平板报错如下&#xf…