LeetCode热题100JS(37/100)第七天|排序链表|合并K个升序链表|LRU缓存|二叉树的中序遍历|二叉树的最大深度|对称二叉树

 148. 排序链表

题目链接:​​​​​​​148. 排序链表

难度:中等

刷题状态:1刷

新知识:

- `dic.reduceRight((t,c)=>(c.next=t,c),null)`  方法从数组的末尾开始执行

解题过程

思考

示例 1:

输入:head = [4,2,1,3]
输出:[1,2,3,4]

当然可以转成数组排序再生成链表,但我感觉这考点应该不是这个

题解分析

参考题解链接:240. 搜索二维矩阵 II(贪心,清晰图解)

好吧,可以这么写,,而且速度还挺快

详细分析如下

var sortList = function(head) {let dic=[]while(head){//将当前节点压入数组中dic.push(head)head=head.next}    dic.sort((a,b)=>a.val-b.val)
//reduceRight 方法从数组的末尾开始执行,逐步向数组的开头移动。
//reduceRight 的回调函数接受两个参数:累加器 t 和当前值 c。//t(累加器):在每次迭代中,t 代表已经连接好的链表部分。在第一次迭代时,t 是 null,因为链表的最后一个节点的 next 应该是 null。//(c.next = t, c) 是一个使用逗号运算符的表达式。
//c.next = t:将当前节点 c 的 next 指针指向累加器 t。这样就将当前节点连接到了已经连接好的链表部分。
//c:逗号运算符会返回其第二个操作数的结果,因此这里返回的是当前节点 c。这个返回值将成为下一次迭代中的累加器 t。return dic.reduceRight((t,c)=>(c.next=t,c),null)
}

手搓答案(无非废话版)

/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @return {ListNode}*/var sortList = function(head) {let dic=[]while(head){dic.push(head)head=head.next}dic.sort((a,b)=>a.val-b.val)return dic.reduceRight((t,c)=>(c.next=t,c),null)
}

总结

 done

  ​​​​​​​23. 合并 K 个升序链表

题目链接:​​​​​​​23. 合并 K 个升序链表

难度:困难

刷题状态:1刷

新知识:

- `lists.flat()`

- `const flatArray = nestedArray.reduce((accumulator, currentValue) => {
    return accumulator.concat(currentValue);
}, []);` 拍平数组

解题过程

思考

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[1->4->5,1->3->4,2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

注意这里是链表数组

还是转换成数组处理好了再生成链表

题解分析

参考题解链接:​​​​​​​合并K个排序链表

手搓答案(无非废话版)

/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode[]} lists* @return {ListNode}*/
var mergeKLists = function(lists) {let dic=[]for(let l of lists){while(l){dic.push(l.val)l=l.next}}dic.sort((a,b)=>a-b)let dum=new ListNode(dic[0]),cur=dumif(!dic.length) return dum.nextfor(let i=1;i<dic.length;i++){cur.next=new ListNode(dic[i])cur=cur.next}return dum
};

总结

done

  ​​​​​​​146. LRU 缓存

题目链接:​​​​​​​146. LRU 缓存

难度:中等

刷题状态:1刷

新知识:

- `this.cache.keys().next().value;`  这行代码用于获取 Map 对象中最旧的键(即第一个插入的键)

解题过程

思考

示例:

输入
["LRUCache", "put", "put", "get", "put", "get", "put", "get", "get", "get"]
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]
输出
[null, null, null, 1, null, -1, null, -1, 3, 4]解释
LRUCache lRUCache = new LRUCache(2);
lRUCache.put(1, 1); // 缓存是 {1=1}
lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}
lRUCache.get(1);    // 返回 1
lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}
lRUCache.get(2);    // 返回 -1 (未找到)
lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}
lRUCache.get(1);    // 返回 -1 (未找到)
lRUCache.get(3);    // 返回 3
lRUCache.get(4);    // 返回 4

一看就没刷过,直接看答案

题解分析

参考题解链接:240. 搜索二维矩阵 II(贪心,清晰图解)

详细分析如下

/*** @param {number} capacity*///LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
var LRUCache = function(capacity) {this.capacity = capacity; // 初始化缓存的最大容量this.cache = new Map();   // 使用 Map 对象来存储缓存的键值对
};/** * @param {number} key* @return {number}*///int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
LRUCache.prototype.get = function(key) {if (!this.cache.has(key)) {return -1; // 如果缓存中没有这个key,返回-1}// 获取值,并将该键值对移到 Map 的末尾,表示最近使用const value = this.cache.get(key);this.cache.delete(key);this.cache.set(key, value);return value;
};/** * @param {number} key * @param {number} value* @return {void}*///void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
LRUCache.prototype.put = function(key, value) {if (this.cache.has(key)) {// 如果键已经存在,删除旧记录this.cache.delete(key);} else if (this.cache.size >= this.capacity) {// 如果缓存已满,删除最旧的记录//this.cache 是一个 Map 对象。// keys() 方法返回一个迭代器对象,该迭代器对象按插入顺序包含 Map 对象中所有的键。// .next():// next() 方法被调用在迭代器对象上,用于获取迭代器中的下一个值。// next() 返回一个对象,该对象具有两个属性:value 和 done。// value 是当前迭代的值(在这个情况下是一个键)。const oldestKey = this.cache.keys().next().value;this.cache.delete(oldestKey);}// 插入新记录this.cache.set(key, value);
};/** * Your LRUCache object will be instantiated and called as such:* var obj = new LRUCache(capacity)* var param_1 = obj.get(key)* obj.put(key,value)*/

手搓答案(无非废话版)

/*** @param {number[][]} matrix* @param {number} target* @return {boolean}*/var searchMatrix = function(matrix, target) {let tag=matrix[0].length-1for(let i=0;i<matrix.length;i++){if(matrix[i][0]>target) return falseif(matrix[i][matrix[i].length-1]<target) continuefor(let j=tag;j>=0;j--){if(matrix[i][j]==target) return trueif(matrix[i][j]>target){tag--}else{break}}}return false
}

总结

 难死了,不好理解,多看几遍

  ​​​​​​​94. 二叉树的中序遍历

题目链接:​​​​​​​​​​​​​​94. 二叉树的中序遍历

难度:简单

刷题状态:1刷

新知识:

解题过程

思考

示例 1:

输入:root = [1,null,2,3]
输出:[1,3,2]

二叉树经典问题,就是我忘了

题解分析

参考题解链接:​​​​​​​二叉树的中序遍历

详细分析如下

var inorderTraversal = function(root) {let res=[]//箭头函数function inorder(root){if(!root) return //体现了中序遍历的“先遍历左子树”的原则。inorder(root.left)//体现了中序遍历的“访问根节点”的步骤。res.push(root.val)//体现了中序遍历的“再遍历右子树”的原则。inorder(root.right)}inorder(root)return res
};

手搓答案(无非废话版)

/*** @param {TreeNode} root* @return {TreeNode} */var inorderTraversal = function(root) {let res=[]function inorder(root){if(!root) returninorder(root.left)res.push(root.val)inorder(root.right)}inorder(root)return res
}

总结

 拿下

  ​​​​​​​104. 二叉树的最大深度

题目链接:​​​​​​​​​​​​​​​​​​​​​104. 二叉树的最大深度

难度:简单

刷题状态:2刷

新知识:

解题过程

思考

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3

也是2刷了,放下1刷过程在题解

题解分析

参考题解链接:​​​​​​​画解算法:104. 二叉树的最大深度

详细分析如下

/*** @param {TreeNode} root* @return {number}*/
var maxDepth = function(root) {if(root){// console.log('root.left',root.left)// console.log('root.right',root.right)let left=maxDepth(root.left)let right=maxDepth(root.right)return Math.max(left,right) +1}else{return 0}
};

手搓答案(无非废话版)

/*** @param {TreeNode} root* @return {number}*/
var maxDepth = function(root) {let res=0,i=0function depth(root){if(!root){res=Math.max(res,i)return }i++let tmp=idepth(root.left)i=tmpdepth(root.right)}depth(root)return res
};

总结

 emm,我用的是套路

  ​​​​​​​101. 对称二叉树

题目链接:​​​​​​​​​​​​​​​​​​​​​​​​​​​​101. 对称二叉树

难度:简单

刷题状态:2刷

新知识:

解题过程

思考

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

也是2刷了,放下1刷过程在题解

没写出来555

题解分析

参考题解链接:​​​​​​​对称二叉树

详细分析如下

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {boolean}*/
function check(L,R){if(!L&&!R) return trueif(!L||!R) return falselet ret=L.val==R.valreturn ret&&check(L.left,R.right)&&check(L.right,R.left)}
var isSymmetric = function(root) {let res=check(root.left,root.right)return !root||res
};

手搓答案(无非废话版)

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {boolean}*/var isSymmetric = function(root) {function check(l,r){if(!l&&!r) return trueif(!l||!r) return falsereturn l.val==r.val&&check(l.left,r.right)&&check(l.right,r.left)}return root?check(root.left,root.right):true
};

总结

 emm,我用的是套路

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

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

相关文章

课程2. 机器学习方法论

课程2. 机器学习方法论 训练算法并评估其质量将样本分成训练和测试。分层 交叉验证方法sklearn 接口算法模型训练模型的应用质量评估 数据预处理标准缩放Violinplot 数据集使用模型Pipeline 在上一讲中&#xff0c;我们讨论了机器学习专家面临的挑战。无论解决的问题类型和解决…

六足仿生机器人地形自适应步态规划研究

六足仿生机器人地形自适应步态规划研究 第1章 绪论第2章 机器人系统建模第3章 地形感知与建模第4章 自适应步态生成算法第5章 动力学仿真与实验第6章 驱动代码设计与实现源码&文档链接 第1章 绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.2.1 多足机器人步态规划 1.2.2 …

mysql表分区

本文简述了mysql表分区的作用和特点&#xff0c;又演示了mysql表分区的创建过程&#xff0c;详细演示了指定不同分区目录时的处理办法。由于表分区对crud操作是透明的&#xff0c;对于普通开发同学其实不用过多关注&#xff0c;但是本着学习的态度&#xff0c;在分库分表等高大…

Nessus安装

Nessus&#xff1a;https://pan.quark.cn/s/f5fb09b6d4fb 1.软件安装 点击安装&#xff0c;剩下的下一步即可。 直接下一步安装即可 2.Web端安装 会弹出一个web窗口 开始初始化 创建用户 开始初始化 3.Cracker 会弹一个黑窗口 运行完&#xff0c;回车即可。访问https://loc…

26-小迪安全-模块引用,mvc框架,渲染,数据联动0-rce安全

先创建一个新闻需要的库 这样id值可以逐级递增 然后随便写个值&#xff0c;让他输出一下看看 模板引入 但是这样不够美观&#xff0c;这就涉及到了引入html模板 模板引入是html有一个的地方值可以通过php代码去传入过去&#xff0c;其他的html界面直接调用&#xff0c;这样页…

第十三届蓝桥杯大赛软件赛决赛C/C++ 大学 B 组

A 【2022——暴力DP / 优雅背包】-CSDN博客 B 【钟表——类日期问题】-CSDN博客 C 【卡牌——二分】-CSDN博客 D 【最大数字——DFS】-CSDN博客 E 【出差——Dijkstra】-CSDN博客 F 【费用报销——01背包】-CSDN博客 G 【故障——条件概率】-CSDN博客 H 【机房—…

树莓集团最新现状更新:南京园区业务的创新与突破

树莓集团在南京的园区业务呈现出蓬勃发展的态势&#xff0c;不断实现创新与突破。 在产业布局方面&#xff0c;南京园区进一步优化了产业结构。除了继续巩固数字影像、数字娱乐等传统优势领域外&#xff0c;还积极拓展了数字金融、数字教育等新兴领域。吸引了一批知名的数字金融…

Linux网络编程(20250301)

网络通信&#xff1a;进行不同主机的进程间通信 解决硬件与软件的互联互通 主机-->交换机-->路由器-->广域网-->路由器-->交换机-->主机 IP地址&#xff1a;区分不同主机 MAC地址&#xff1a;计算机硬件地址 端口号&#xff1a;区分主机上的不同进程 1…

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-附录B-严格模式

附录B、严格模式 严格模式 ECMAScript 5 首次引入严格模式的概念。严格模式用于选择以更严格的条件检查 JavaScript 代码错误&#xff0c;可以应用到全局&#xff0c;也可以应用到函数内部。严格模式的好处是可以提早发现错误&#xff0c;因此可以捕获某些 ECMAScript 问题导致…

蓝桥试题:混境之地(记忆化搜索)

一、问题描述 小蓝有一天误入了一个混境之地。 好消息是&#xff1a;他误打误撞拿到了一张地图&#xff0c;并从中获取到以下信息&#xff1a; 混境之地是一个n⋅m 大小的矩阵&#xff0c;其中第 i 行第 j 列的的点 h i j​ 表示第 i 行第 j 列的高度。他现在所在位置的坐标…

CC++链接数据库(MySQL)超级详细指南

C/C链接数据库&#xff08;MySQL&#xff09;超级详细指南 在C/C编程中&#xff0c;与数据库进行交互是一项常见的任务。MySQL作为一个广泛使用的开源关系型数据库管理系统&#xff0c;提供了丰富的API供C/C开发者使用。本文将详细介绍如何在C/C程序中链接MySQL数据库&#xf…

基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 EM算法 E步:期望步 M步:最大化步 4.2 GMM模型 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 程序运行配置环境&#xff1a; 人工智能算法…

制服小程序的“滑手”:禁用页面左右滑动全攻略

哈哈&#xff0c;看来你已经很聪明地发现了小程序中左右滑动的“顽皮”行为&#xff01;&#x1f604; 没错&#xff0c;我们可以通过设置 disableScroll 属性来“管教”它&#xff0c;同时结合 CSS 样式让页面既禁得住横向“乱跑”&#xff0c;又能顺畅地上下滚动。你的方案已…

docker学习笔记(1)从安装docker到使用Portainer部署容器

docker学习笔记第一课 先交代背景 docker宿主机系统&#xff1a;阿里云ubuntu22.04 开发机系统&#xff1a;win11 docker镜像仓库&#xff1a;阿里云&#xff0c;此阿里云与宿主机系统没有关系&#xff0c;是阿里云提供的一个免费的docker仓库 代码托管平台&#xff1a;github&…

stable-diffusion-webui 加载模型文件

背景 stable-diffusion-webui 安装完毕后&#xff0c;默认的模型生成的效果图并不理想&#xff0c;可以根据具体需求加载指定的模型文件。国内 modelscope 下载速度较快&#xff0c;以该站为例进行介绍 操作步骤 找到指定的模型文件 在 https://modelscope.cn/models 中查找…

kotlin高级用法总结

Kotlin 是一门功能强大且灵活的编程语言&#xff0c;除了基础语法外&#xff0c;它还提供了许多高级特性&#xff0c;可以帮助你编写更简洁、高效和可维护的代码。以下是 Kotlin 的一些高级用法&#xff0c;涵盖了协程、扩展函数、属性委托、内联类、反射等内容。 协程&#x…

Linux网络 NAT、代理服务、内网穿透

NAT 技术 IPv4 协议中存在 IP 地址数量不充足的问题&#xff0c;而 NAT 技术是当前解决 IP 地址不够用的主要手段 , 是路由器的一个重要功能。NAT 能够将私有 IP 对外通信时转为全局 IP&#xff0c;也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法。 这可以让很多学…

世界模型在塑造自动驾驶中的作用:综述

25年2月来自华中理工和百度的论文“”The Role of World Models in Shaping Autonomous Driving: A Comprehensive Survey“。 驾驶世界模型 (DWM) 专注于预测驾驶过程中的场景演变&#xff0c;已成为实现自动驾驶一个有前途的范例。这些方法使自动驾驶系统能够更好地感知、理…

全向广播扬声器在油气田中的关键应用 全方位守护安全

油气田作为高风险作业场所&#xff0c;安全生产始终是重中之重。在紧急情况下&#xff0c;如何快速、有效地传达信息&#xff0c;确保人员安全撤离&#xff0c;是油气田安全管理的关键环节。全向广播扬声器凭借其全方位覆盖、高音质输出和强大的环境适应性&#xff0c;成为油气…

【AI大模型】AI赋能,使用DeepSeek 高效制作PPT实战详解

目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…