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.pswp.cn/bicheng/72478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72478.shtml
英文地址,請注明出處:http://en.pswp.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優…