LeetCode--23.合并k個升序鏈表

解題思路:

? ? ? ? 1.獲取信息:

? ? ? ? ? ? ? ? 給出了多個升序鏈表,要求合并成一個升序鏈表,返回首元結點

? ? ? ? 2.分析題目:

? ? ? ? ? ? ? ? 外面在21題的時候,講了怎樣合并兩個升序鏈表為一個升序鏈表,不了解的,建議去看一下21題題解,不要好高騖遠

? ? ? ? ? ? ? ? (有時候一個問題比較難,將它拆分成多個小問題取逐一解決是一個不錯的方法)

? ? ? ? ? ? ? ? 好了,那我們現在知道怎么合并兩個有序鏈表了,類比推理,我們可以將這個問題看作是兩數求和的那道題,我們怎么來選取鏈表進行合并,就顯得尤為重要

? ? ? ? ? ? ? ? (其實每道題的思路和想法都是融會貫通的,只要你理解了,學會了,都大差不差)

? ? ? ? ? ? ? ? 具體選取鏈表來合并的方式,我們在下面的嘗試編寫代碼環節中借著代碼,我會逐一講解

? ? ? ? 3.示例查驗:

? ? ? ? ? ? ? ? 示例1:說實話不夠鮮明,讓我感到鮮明的還是代碼框中給出的默認代碼

? ? ? ? ? ? ? ? 讓我知道,lists中是一個用來儲存首元結點地址的vector而已

? ? ? ? ? ? ? ? 示例2:如果lists為空,則返回空

? ? ? ? ? ? ? ? 示例3:如果lists中的鏈表為空,也返回空,因為空跟空合并也是空,但是如果空跟非空合并,那就是非空了

? ? ? ? 4.嘗試編寫代碼

? ? ? ? ? ? ? ? (1)逐次合并鏈表

? ? ? ? ? ? ? ? ? ? ? ? (在這里再說一下,我在這個貼子的題解中不會寫出怎么合并兩個有序鏈表,只會說怎么選取鏈表來合并,主要是最近我眼睛有點痛,不想看電子設備,等到康復的時候,我會補上的,還有就是可以幫助你,讓你多做一道題哦,就是21題,你可以開始感謝我了,注意:合并兩個有序鏈表可以用遞歸,也可以用迭代)

? ? ? ? ? ? ? ? ? ? ? ? 思路:取第一個鏈表和第二個鏈表進行合并,它們合并而成的鏈表再和第三個鏈表進行合并,依次類推,直到所有鏈表都進行了合并,成為了一個升序鏈表

以下是完整代碼

class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.empty())return nullptr;//如果lists為空,則返回空指針ListNode*dummy=lists[0];//取第一個鏈表for(int i=1;i<lists.size();i++){//依次取后續的鏈表dummy=Link(dummy,lists[i]);//這里自己品味一下}return dummy;//返回合并后的鏈表的首元結點的地址(也可以說指向首元結點的指針)}
private://這里還是照顧一下沒看過21題題解的。。。我想不出什么親切的稱呼,可以老少皆宜,可以自行腦補一下ListNode* Link(ListNode*dummy,ListNode*list){//這里我使用的遞歸來寫的合并兩個有序鏈表if(dummy==nullptr)return list;//如果某條鏈表為空,則返回沒空的那條鏈表if(list==nullptr)return dummy;if(dummy->val<list->val){dummy->next=Link(dummy->next,list);//比較小的那個結點的下一位是去掉比較小的那個結點的鏈表和另一條鏈表合并后的鏈表return dummy;}else{list->next=Link(dummy,list->next);return list;}}//我感覺我這里說的,你可能聽不懂,所以我還是建議你去看一下21題題解
};

? ? ? ? ? ? ? ? (2)分治法來合并鏈表

? ? ? ? ? ? ? ? ? ? ? ? 思路:分治法的思想就是大問題拆分成小問題

? ? ? ? ? ? ? ? ? ? ? ? 對于鏈表組lists,我們每次劃分為二,那么是不是最后可以劃成若干個只有兩個鏈表的組合,我們再合并這些組合,最后就是一個升序的鏈表了

文字無力,我還是放圖說話

以下是完整代碼(就不寫注釋了,自己品味,考驗一下你,測試一下你的忠誠度,后續眼睛不痛了,我會補上的)

class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.empty())return nullptr;return Sep(lists,0,lists.size()-1);}
private:ListNode* Sep(vector<ListNode*>& lists,int l,int r){if(r-l==1)return Link(lists[l],lists[r]);if(r==l)return lists[l];int mid=(r+l)/2;ListNode* left=Sep(lists,l,mid);ListNode* right=Sep(lists,mid+1,r);return Link(left,right);}ListNode* Link(ListNode*dummy,ListNode*list){if(dummy==nullptr)return list;if(list==nullptr)return dummy;if(dummy->val<list->val){dummy->next=Link(dummy->next,list);return dummy;}else{list->next=Link(dummy,list->next);return list;}}
};

? ? ? ? ? ? ? ? (3)選擇重造

? ? ? ? ? ? ? ? ? ? ? ? (這里留下這個在力扣上面看到的方法,我只給思路,后續眼睛不痛了,我會補上,還是老樣子,考驗一下你寫代碼的能力,你可以后續過來對答案,最遲后天就會補,畢竟是正事)

? ? ? ? ? ? ? ? ? ? ? ? 我們取每條鏈表的首元結點,在這么多個首元結點中,我們從小到大開始連接首元結點,連接完之后,我們再次取每條鏈表(每次取完首元結點,那些鏈表就失去了那些結點,原首元結點下一個結點就是新的首元結點)的首元結點,重復操作,直到每條鏈表都被取完了,那最后拼成的鏈表就是答案

? ? ? ? ? ? ? ? ? ? ? ? 好咯,接下來就交給你咯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83808.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【國產化適配】如何選擇高效合規的安全數據交換系統?

一、安全數據交換系統的核心價值與國產化需求 在數字化轉型浪潮中&#xff0c;企業數據流動的頻率與規模呈指數級增長&#xff0c;跨網文件傳輸已成為日常運營的剛需&#xff0c;所以安全數據交換系統也是企業必備的工具。然而&#xff0c;數據泄露事件頻發、行業合規要求趨嚴…

JMM初學

文章目錄 1,線程間的同步和通信1.1, 共享內存并發模型 (Shared Memory Model)線程通信機制線程同步機制特點 1.2, 消息傳遞并發模型 (Message Passing Model)線程通信機制線程同步機制特點 適用場景對比 2,Java內存模型JMM2.0,Java內存模型的基礎&#xff08;1&#xff09;內存…

【動手學MCP從0到1】2.5 MCP中的Context日志輸出、進度匯報和服務端調用客戶端的大模型項目實現步驟詳解

MCP中的Context 1. Context2. 日志輸出2.1 服務端2.2 客戶端2.2.1 客戶端代碼調試2.2.2 客戶端全部代碼 3. 進度匯報3.1 服務端3.2 客戶端3.2.1 客戶端代碼調試3.2.2 客戶端全部代碼 4. 模型調用4.1 服務端4.2 客戶端4.2.1 客戶端代碼調試4.2.2 客戶端全部代碼 1. Context Con…

QT自定義資源管理器

使用qt 和 C實現。還在優化中 項目地址:GitHub - Linda1226/FileResourceManager: 自定義資源管理器 有問題可以交流

[華為eNSP] OSPF綜合實驗

目錄 配置流程 畫出拓撲圖、標注重要接口IP 配置客戶端IP 配置服務端IP 配置服務器服務 配置路由器基本信息&#xff1a;名稱和接口IP 配置路由器ospf協議 測試結果 通過配置OSPF路由協議&#xff0c;實現跨多路由器的網絡互通&#xff0c;并驗證終端設備的訪問能力。 …

如何把本地服務器變成公網服務器?內網ip網址轉換到外網連接訪問

? 內網IP只能在本地內部網絡連接訪問&#xff0c;當本地搭建服務器部署好相關網站或應用后&#xff0c;在局域網內可以通過內網IP訪問&#xff0c;但在外網是無法直接訪問異地內網IP端口應用的&#xff0c;只有公網IP和域名才能實現互聯網上的訪問。那么需要如何把本地服務器變…

Linux-文件管理及歸檔壓縮

1.根下的目錄作用說明&#xff1a; /&#xff1a;Linux系統中所有的文件都在根下/bin&#xff1a;(二進制命令目錄)存放常用的用戶命令/boot&#xff1a;系統啟動時的引導文件&#xff08;內核的引導配置文件&#xff0c;grub配置文件&#xff0c;內核配置文件&#xff09; 例…

從零開始的python學習(七)P95+P96+P97+P98+P99+P100+P101

本文章記錄觀看B站python教程學習筆記和實踐感悟&#xff0c;視頻鏈接&#xff1a;【花了2萬多買的Python教程全套&#xff0c;現在分享給大家&#xff0c;入門到精通(Python全棧開發教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…

Linux 查找特定字符詳細講解

CentOS 7 中使用 grep 查找特定字符詳細筆記? 一、grep 命令概述? grep 全稱為 Global Regular Expression Print&#xff0c;即全局正則表達式打印&#xff0c;是 CentOS 7 系統中用于文本搜索的核心工具。它基于正則表達式或固定字符串&#xff0c;在文件、標準輸入流中進…

uniappx插件nutpi-idcard 開發與使用指南(適配鴻蒙)

uniappx插件nutpi-idcard 開發與使用指南&#xff08;適配鴻蒙&#xff09; 前言 nutpi-idcard 是一個基于 UTS (uni-app TypeScript Syntax) 開發的 uni-app 插件適配鴻蒙&#xff0c;主要用于解析身份證號碼&#xff0c;提取其中的關鍵信息&#xff0c;如地區、出生日期、性…

Grafana-ECharts應用講解(玫瑰圖示例)

工具: MySQL 數據庫 MySQL Workbench 數據庫管理工具(方便編輯數據) Grafana v11.5.2 Business Charts 6.6(原 Echarts插件) 安裝 安裝 MySQL社區版安裝 MySQL Workbench安裝 Grafana在 Grafana 插件中搜索 Business Charts 進行安裝以上安裝步驟網上教程很多,自行搜…

React狀態管理Context API + useReducer

在 React 中&#xff0c;Context API useReducer 是一種輕量級的狀態管理方案&#xff0c;適合中小型應用或需要跨組件共享復雜狀態的場景。它避免了 Redux 的繁瑣配置&#xff0c;同時提供了清晰的狀態更新邏輯。 1. 基本使用步驟 (1) 定義 Reducer 類似于 Redux 的 reduce…

3 個優質的終端 GitHub 開源工具

1、Oh My Zsh Oh My Zsh 是一個幫助你管理和美化 zsh 終端的開源工具。它讓你的終端更炫酷、更高效。安裝后&#xff0c;你可以快速使用各種插件和主題&#xff0c;比如常見的 git 命令簡化、支持多種編程語言工具等&#xff0c;每次打開終端都會有驚喜。無論你是開發者還是普…

無人機巡檢智能邊緣計算終端技術方案??——基于EFISH-SCB-RK3588工控機/SAIL-RK3588核心板的國產化替代方案?

一、方案核心價值? ?實時AI處理?&#xff1a;6TOPS NPU實現無人機影像的實時缺陷檢測&#xff08;延遲&#xff1c;50ms&#xff09;?全國產化?&#xff1a;芯片、操作系統、算法工具鏈100%自主可控?極端環境適配?&#xff1a;-40℃~85℃穩定運行&#xff0c;IP65防護等…

SpringAI 1.0.0 正式版——利用Redis存儲會話(ChatMemory)

官方文檔&#xff1a;Chat Memory :: Spring AI Reference 1. 引言 SpringAI 1.0.0 改動了很多地方&#xff0c;本文根據官方的InMemoryChatMemoryRepository實現了自定義的RedisChatMemoryRepository&#xff0c;并使用MessageWindowChatMemory創建ChatMemory 2. 實現 2.1.…

RFC8489-STUN

0. 學習參考 RFC5389 中文翻譯 中文RFC RFC文檔 RFC翻譯 RFC中文版 RFC 5389&#xff1a;NAT 的會話遍歷實用程序 &#xff08;STUN&#xff09; --- RFC 5389: Session Traversal Utilities for NAT (STUN) 1. RFC 3489的演變 自 RFC 3489 發布以來的經驗發現&#xff0c;…

開始在本地部署自己的 Gitea 服務器

0.簡介 在軟件開發和團隊協作中&#xff0c;代碼管理是至關重要的環節。筆者一直使用gitblit管理自己的倉庫。然鵝&#xff0c;這個軟件已經很久沒有更新了。經過多方考察&#xff0c;發現Gitea 是一款輕量級的開源代碼托管平臺&#xff0c;具有易于部署、資源占用少、功能豐富…

Xsens-AAA工作室品質,為動畫師準備

每一幀都講述著一個故事&#xff0c;當動作真實呈現時&#xff0c;故事便鮮活起來。我們打造并改進了 Xsens Animate&#xff0c;助力專業人士突破數字動畫的界限。 通過升級后的 Xsens Animate&#xff0c;您可以獲得女性和男性解剖模型以及更精確的運動引擎&#xff0c;從一…

嵌入(Embedding)技術的實現原理與應用場景解析

嵌入&#xff08;Embedding&#xff09;技術的實現原理與應用場景解析 引言&#xff1a;從One-Hot到語義空間 在自然語言處理的演進歷程中&#xff0c;嵌入技術&#xff08;Embedding&#xff09;的誕生標志著一個重要轉折點——它讓離散的符號表示突破了維度詛咒&#xff0c…

金倉數據庫征文-金倉KES數據同步優化實踐:邏輯解碼與增量同步

目錄 一.同步場景與方案選型 二.什么是KES 三.同步環境配置 1.前置條件驗證 2.邏輯解碼配置 四.同步實施與問題排查 1.結構映射規則 2.增量數據捕獲 3.數據一致性校驗 五.性能調優實踐 1.同步線程優化 2.批量提交優化 3.資源監控指標 六.典型場景解決方案 1.雙向…