LeetCode 0023. 合并 K 個升序鏈表

【LetMeFly】23.合并 K 個升序鏈表

力扣題目鏈接:https://leetcode.cn/problems/merge-k-sorted-lists/

給你一個鏈表數組,每個鏈表都已經按升序排列。

請你將所有鏈表合并到一個升序鏈表中,返回合并后的鏈表。

?

示例 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

示例 2:

輸入:lists = []
輸出:[]

示例 3:

輸入:lists = [[]]
輸出:[]

?

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i]升序 排列
  • lists[i].length 的總和不超過 10^4

方法一:優先隊列

我們只需要將每個鏈表的 當前節點(初始值是表頭) 放入小根堆中,每次從小根堆中取出一個節點并拼接起來,若這個節點不是表尾節點,則這個節點的下一個節點入隊。

  • 時間復雜度 O ( N × log ? k ) O(N\times \log k) O(N×logk),其中 n n n是所有節點的個數
  • 空間復雜度 O ( k ) O(k) O(k)

AC代碼

C++

class Solution {
private:struct cmp {bool operator() (const ListNode* a, const ListNode* b) {return a->val > b->val;}};
public:ListNode* mergeKLists(vector<ListNode*>& lists) {priority_queue<ListNode*, vector<ListNode*>, cmp> pq;for (ListNode*& node : lists) {if (node) {pq.push(node);}}ListNode* head = new ListNode(), *p = head;while (pq.size()) {ListNode* thisNode = pq.top();pq.pop();p->next = thisNode;p = thisNode;if (thisNode->next) {pq.push(thisNode->next);}}return head->next;}
};

Python

# from typing import List, Optional
# import heapq# # Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next# ListNode.__lt__ = lambda a, b: a.val < b.valclass Solution:def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:pq = []for node in lists:if node:heapq.heappush(pq, node)head = ListNode()p = headwhile pq:thisNode = heapq.heappop(pq)p.next = thisNodep = thisNodeif thisNode.next:heapq.heappush(pq, thisNode.next)return head.next

同步發文于CSDN,原創不易,轉載請附上原文鏈接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/132243952

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

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

相關文章

docker的資源控制管理——Cgroups

目錄 一、對CPU使用率的控制 1.1 CPU 資源控制 1.2 cgroups有四大功能 1.3 設置cpu使用率上限 查看周期限制和cpu配額限制 進行cpu壓力測試然后修改每個周期的使用cpu的時間&#xff0c;查看cpu使用率 1.4 設置cpu資源占用比&#xff08;設置多個容器時才有效&#xf…

跨境外貿業務,選擇動態IP還是靜態IP?

在跨境業務中&#xff0c;代理IP是一個關鍵工具。它們提供了匿名的盾牌&#xff0c;有助于克服網絡服務器針對數據提取設置的限制。無論你是需要經營管理跨境電商店鋪、社交平臺廣告投放&#xff0c;還是獨立站SEO優化&#xff0c;代理IP都可以讓你的業務程度更加絲滑&#xff…

Linux命令 -- vim

Linux命令 -- vim 前言一般模式光標移動復制粘貼內容查找 底線命令行模式 前言 用vim指令進入文件。 剛進入時是命令行模式&#xff0c;也叫一般模式。 按i或者insert進入編輯模式&#xff0c;此時可以編輯文件內容。 按esc可從編輯模式退回到一般模式&#xff0c;輸入冒號進…

基于 spring boot 的動漫信息管理系統【源碼在文末】

半山腰總是最擠的&#xff0c;你得去山頂看看 大學生嘛&#xff0c;論文寫不出&#xff0c;代碼搞不懂不要緊&#xff0c;重要的是&#xff0c;從這一刻就開始學習&#xff0c;立刻馬上&#xff01; 今天帶來的是最新的選題&#xff0c;基于 spring boot 框架的動漫信息管理系…

Linux系統安裝Google Chrome

1.進入谷歌瀏覽器官網 Google Chrome - Download the Fast, Secure Browser from GoogleGet more done with the new Google Chrome. A more simple, secure, and faster web browser than ever, with Google’s smarts built-in. Download now.http://www.google.cn/intl/en_…

神經網絡基礎-神經網絡補充概念-50-學習率衰減

概念 學習率衰減&#xff08;Learning Rate Decay&#xff09;是一種優化算法&#xff0c;在訓練深度學習模型時逐漸減小學習率&#xff0c;以便在訓練的后期更加穩定地收斂到最優解。學習率衰減可以幫助在訓練初期更快地靠近最優解&#xff0c;而在接近最優解時減小學習率可以…

給wordpress添加關鍵詞與描述

Wordpress網站的關鍵字及網頁描述關系網站對搜索引擎的友好程度&#xff0c;如果自己手動加顯然太折騰了&#xff0c;那如何讓WordPress博客自動為每篇文章自動關鍵字及網頁描述。每篇文章的內容不同&#xff0c;我們該如何讓wordpress自動添加文章描述和關鍵詞呢&#xff1f;下…

Azure如何啟用網絡觀察應用程序

文章目錄 基礎概念介紹實操 基礎概念介紹 Azure中的網絡觀察應用程序是一種用于監視和診斷Azure網絡的工具。它提供了一種集中管理和監控網絡流量、連接性和性能的方式。網絡觀察應用程序能夠提供網絡流量分析、連接監視、性能監視和故障診斷等功能&#xff0c;用于幫助管理員…

K8S核心組件etcd詳解(下)

1 k8s如何使用etcd 在k8s中所有對象的manifest都需要保存到某個地方&#xff0c;這樣他們的manifest在api server重啟和失敗的時候才不會丟失。 只有api server能訪問etcd&#xff0c;其它組件只能間接訪問etcd的好處是 增強樂觀鎖系統及驗證系統的健壯性 方便后續存儲的替換…

神經網絡基礎-神經網絡補充概念-43-梯度下降法

概念 梯度下降法&#xff08;Gradient Descent&#xff09;是一種優化算法&#xff0c;用于在機器學習和深度學習中最小化&#xff08;或最大化&#xff09;目標函數。它通過迭代地調整模型參數&#xff0c;沿著梯度方向更新參數&#xff0c;以逐步接近目標函數的最優解。梯度…

使用 BERT 進行文本分類 (01/3)

攝影&#xff1a;Max Chen on Unsplash 一、說明 這是使用 BERT 語言模型的一系列文本分類演示的第一部分。以文本的分類作為例&#xff0c;演示它們的調用過程。 二、什么是伯特&#xff1f; BERT 代表 來自變壓器的雙向編碼器表示。 首先&#xff0c;轉換器是一種深度學習模…

SpringBoot 操作Redis、創建Redis文件夾、遍歷Redis文件夾

文章目錄 前言依賴連接 RedisRedis 配置文件Redis 工具類操作 Redis創建 Redis 文件夾查詢數據遍歷 Redis 文件夾 前言 Redis 是一種高性能的鍵值存儲數據庫&#xff0c;支持網絡、可基于內存亦可持久化的日志型&#xff0c;而 Spring Boot 是一個簡化了開發過程的 Java 框架。…

【TA 挖坑02】RayMarching SDF 物體黏合

寫在前面 由于實習和忙著論文很久沒經營博客了&#xff0c;最近以各種方式收集到了一些想實現的效果&#xff0c;其中一個就是卡通云融合、變大變小、聚散收攏的效果如何實現的問題&#xff0c;這就不得不提擱置了很久的RayMarching... 挖坑&#xff01;整理一下有幫助的文章…

AWS WAF實戰、優勢對比和缺陷解決

文章目錄 挑戰和目標AWS WAF的優勢AWS WAF的不足我是怎么做的?什么是比較好的AWS WAF設計? 筆者為了解決公司Web站點防御性問題&#xff0c;較為深入的研究AWS WAF的相關規則。面對上千萬的沖突&#xff0c;筆者不得設計出一種能漂亮處理沖突數據WAF規則。 AWS WAF開發人員在…

Cocos2d 項目問題記錄

環境搭建 正常運行 Android 端的 Cocos2d 項目&#xff0c;本機至少需要 Android SDK、NDK 環境、Android Studio 項目報錯總結 CMake Error: CMake was unable to find a build program corresponding to "Ninja" 默認創建工程的 gradle.tools 版本為 3.1.0&…

微服務08-多級緩存

1.什么是多級緩存 傳統的緩存策略一般是請求到達Tomcat后,先查詢Redis,如果未命中則查詢數據庫,如圖: 存在下面的問題: ?請求要經過Tomcat處理,Tomcat的性能成為整個系統的瓶頸 ?Redis緩存失效時,會對數據庫產生沖擊 多級緩存就是充分利用請求處理的每個環節,分…

卷積操作后特征圖尺寸,感受野,參數量的計算

文章目錄 1、輸出特征圖的尺寸大小2、感受野的計算3、卷積核的參數量 1、輸出特征圖的尺寸大小 如果包含空洞卷積&#xff0c;即擴張率dilation rate不為1時&#xff1a; 2、感受野的計算 例如&#xff0c;圖像經過兩個3*3&#xff0c;步長為2的卷積后感受野為&#xff1a; co…

Centos7多臺服務器免密登錄

準備四臺服務器: docker0 docker1 docker2 docker3 在docker0服務器上生成公鑰和私鑰 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…

在Gazebo中添加懸浮模型后,利用鍵盤控制其移動方法

前段時間寫了文章&#xff0c;通過修改sdf、urdf模型的方法&#xff0c;在Gazebo中添加懸浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;在Gazebo中添加懸浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;修改sdf、urdf模型_sagima_sdu的博客-CSDN博客 今天講…

Leetcode32 最長有效括號

給你一個只包含 ( 和 ) 的字符串&#xff0c;找出最長有效&#xff08;格式正確且連續&#xff09;括號子串的長度。 代碼如下&#xff1a; class Solution {public int longestValidParentheses(String str) {Stack<Integer> s new Stack<>();int res 0;int st…