LeetCode Hot100刷題——合并區間

56. 合并區間

以數組?intervals?表示若干個區間的集合,其中單個區間為?intervals[i] = [starti, endi]?。請你合并所有重疊的區間,并返回?一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間?。

示例 1:

輸入:intervals = [[1,3],[2,6],[8,10],[15,18]]
輸出:[[1,6],[8,10],[15,18]]
解釋:區間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].

示例?2:

輸入:intervals = [[1,4],[4,5]]
輸出:[[1,5]]
解釋:區間 [1,4] 和 [4,5] 可被視為重疊區間。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

實現步驟

  1. 檢查輸入數組是否為空或長度為0,如果是,直接返回空數組。
  2. 否則,對intervals數組進行排序。使用Arrays.sort自定義Comparator。
  3. 創建merged列表,初始時加入第一個區間。
  4. 遍歷從第二個區間開始的所有區間。
  5. 獲取merged列表的最后一個區間。
  6. 比較當前區間的start和最后一個區間的end。
  7. 如果當前區間的start <= 最后一個區間的end,則合并,更新最后一個區間的end為兩者的最大值。
  8. 否則,直接將當前區間加入merged列表。
  9. 最后,將merged列表轉換為數組返回。

程序代碼

  • 排序區間:首先將所有區間按照起始點進行排序。這樣可以確保所有可能重疊的區間都是連續的。
  • 合并重疊區間:遍歷排序后的區間,逐個合并重疊的區間。具體來說,維護一個合并后的區間結果列表,如果當前區間與前一個合并后的區間重疊,則合并它們;否則,將當前區間添加到結果列表中。
class Solution {public int[][] merge(int[][] intervals) {// 數組為空(長度為0)if(intervals.length == 0){return new int[0][];}// 按區間的起始點進行排序Arrays.sort(intervals,(a,b) -> Integer.compare(a[0], b[0]));// 結果列表List<int[]> merged = new ArrayList<>();// 初始時加入第一個區間merged.add(intervals[0]);for(int i = 1; i < intervals.length; i++){int[] last = merged.get(merged.size() - 1);int[] current = intervals[i];// 當前區間的起始點小于等于上一個區間的結束點,說明有重疊if(current[0] <= last[1]){// 合并區間,更新結束點為兩者較大的那個last[1] = Math.max(last[1],current[1]);} else{// 無重疊,直接添加當前區間merged.add(current);}}return merged.toArray(new int[merged.size()][]);}
}

補充:使用 Lambda 表達式對區間數組按起始點升序排序

在Java中,Arrays.sort()方法的第二個參數可以接收一個Comparator對象,用于定義排序規則。Lambda表達式在這里的作用是簡化Comparator的匿名內部類的定義,直接描述兩個區間如何比較大小。

Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));

解析:

????????Arrays.sort()的作用:對數組intervals進行排序,排序規則由第二個參數(Lambda表達式)決定。

????????Lambda表達式 (a,b) -> ...:

? ? ? ? ? ? ? ??1. a 和 b 是待比較的兩個區間(即intervals中的兩個元素,類型是int[ ])。

? ? ? ? ? ? ? ? 2. a[0] 和 b[0] 分別表示這兩個區間的起始點。

? ? ? ? ? ? ? ? 3. Integer.compare(a[0],b[0])的作用是:比較兩個起始點的大小。

????????比較邏輯:

? ? ? ? ? ? ? ??如果 a[0] < b[0],返回負數,表示a應該排在b的前面(升序)。

? ? ? ? ? ? ? ? 如果 a[0] > b[0],返回正數,表示a應該排在b的后面(降序)。

? ? ? ? ? ? ? ? 如果相等,返回0,表示順序不變。

Lambda表達式與傳統寫法的對比:

如果不使用Lambda表達式,代碼需要定義一個匿名的Comparator:

Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] a, int[] b) {return Integer.compare(a[0], b[0]);}
});

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

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

相關文章

《Metasploit框架核心模塊解析與安全防護實踐》?

目錄 ??一、框架模塊化設計與安全驗證價值?? ??1. 漏洞驗證模塊&#xff08;Exploit Modules&#xff09;?? ??2. 安全評估模塊&#xff08;Auxiliary Modules&#xff09;?? ??3. 安全響應模塊&#xff08;Post-Exploitation&#xff09;?? ??4. 載荷安全…

Cribl 中 Parser 扮演著重要的角色 + 例子

先看文檔: Parser | Cribl Docs Parser The Parser Function can be used to extract fields out of events or reserialize (rewrite) events with a subset of fields. Reserialization will preserve the format of the events. For example, if an event contains comma…

程序設計實踐--排序(1)

&#xff11;、插入排序&#xff08;一個數組&#xff09; #include<bits/stdc.h> using namespace std; const int N1e35; int a[N]; int n; int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}for(int i1;i<n;i){int va[i];int ji-1;while(j>1&am…

MAC電腦中右鍵后復制和拷貝的區別

在Mac電腦中&#xff0c;右鍵菜單中的“復制”和“拷貝”操作在功能上有所不同&#xff1a; 復制 功能&#xff1a;在選定的位置創建一個與原始文件相同的副本。快捷鍵&#xff1a;CommandD用于在當前位置快速復制文件&#xff0c;CommandC用于將內容復制到剪貼板。效果&…

新能源汽車焊接智能節氣閥

在新能源汽車產業迅猛發展的浪潮中&#xff0c;制造工藝的優劣直接關系到車輛的性能、安全與市場競爭力。焊接&#xff0c;作為新能源汽車生產流程里的關鍵一環&#xff0c;無論是構建車身框架&#xff0c;還是連接電池模組&#xff0c;其質量的好壞都起著決定性作用。而在焊接…

Linux:面試題

1. 什么是中斷和異常&#xff1f; 中斷&#xff1a;由外部設備&#xff08;如鍵盤、網卡&#xff09;觸發的異步事件&#xff0c;用于通知 CPU 有緊急事件需要處理。 異常&#xff1a;由 CPU 內部執行指令時產生的同步事件&#xff08;如除零錯誤、缺頁異常&#xff09;&#…

linux關閉某端口暫用的進程

查看是哪個端口暫用 sudo netstat -tulpn | grep :80根據圖片 顯示 80端口暫用的 進程id是 3002 結束進程id為3002的進程 sudo kill -9 3002

【學習心得】Jupyter 如何在conda的base環境中其他虛擬環境內核

如果你在conda的base環境運行了jupyter lab打開了一個ipynb文本&#xff0c;此時選擇的內核是base虛擬環境的Python內核&#xff0c;如果我想切換成其他conda虛擬環境來運行這個文件該怎么辦&#xff1f;下面我們試著還原一下問題&#xff0c;并且解決問題。 【注】 這個問題出…

React Flow 邊的基礎知識與示例:從基本屬性到代碼實例詳解

本文為《React Agent&#xff1a;從零開始構建 AI 智能體》專欄系列文章。 專欄地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。項目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代碼示?例與實戰源&#xff09;。完整介紹…

ZooKeeper 原理解析及優劣比較

大家好&#xff0c;這里是架構資源棧&#xff01;點擊上方關注&#xff0c;添加“星標”&#xff0c;一起學習大廠前沿架構&#xff01; 引言 在分布式系統中&#xff0c;服務注冊、配置管理、分布式鎖、選舉等場景都需要一個高可用、一致性強的協調服務。Apache ZooKeeper 憑…

模糊照片變清晰:照片高清修復 ComfyUI 使用教學

模糊照片變清晰 滿心歡喜地翻出舊相冊&#xff0c;想重溫那些美好的回憶&#xff0c;結果照片卻模糊不清&#xff0c;根本看不清當年的模樣&#xff1b;又或者精心拍攝了一張超有氛圍感的照片&#xff0c;結果因為手抖或者光線問題&#xff0c;變得模糊&#xff0c;無法發朋友圈…

IEEEtran中文獻中的作者大于3個時,用et al.省略

latex&#xff1a; 在使用bib文件的時候&#xff0c;當參考文獻超過三個作者時&#xff0c;第三個作者后加逗號并接上et al.。我使用的是IEEEtran.bst。 \begingroup \small \bibliographystyle{IEEEtran} \bibliography{newbmyref1} \endgroup1.需要將IEEEtran.bst添加到這個…

Android Studio Kotlin 中的方法添加灰色參數提示

在使用 Android Studio 時&#xff0c; 我發現使用 Java 編寫方法后在調用方法時&#xff0c; 會自動顯示灰色的參數。 但在 Kotlin 中沒有顯示&#xff0c; 于是找了各種方法最后找到了設置&#xff0c; 并且以本文章記錄下來。 博主博客 https://blog.uso6.comhttps://blog.…

python寵物用品商城系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

《具身智能機器人:自修復材料與智能結構設計的前沿探索》

在具身智能機器人的研發進程中&#xff0c;自修復材料與智能結構設計無疑是極具挑戰性與創新性的關鍵領域&#xff0c;吸引著無數科研人員投身其中&#xff0c;探尋未知。 傳統機器人在復雜多變的環境中執行任務時&#xff0c;一旦材料出現損傷&#xff0c;如外殼刮擦、內部線…

矩陣的秩(Rank)

矩陣的秩&#xff08;Rank&#xff09;是線性代數中的核心概念&#xff0c;表示矩陣中線性無關的行&#xff08;或列&#xff09;的最大數量&#xff0c;反映了矩陣所包含的“獨立信息”的多少。以下是其核心要點&#xff1a; 1. 秩的定義 行秩&#xff1a;矩陣中線性無關的行…

麒麟系統編譯osg —— 擴展篇

一、背景 前文講到麒麟系統編譯osg&#xff0c;通常情況下會提示&#xff1a; 意思是無法生成插件osgdb_jpeg&#xff0c;需要配置“JPEG_LIBRARY”和“JPEG_INCLUDE_DIR”。 經查&#xff0c;本機不存在jpeglib.h和libjpeg.so&#xff0c;需要另外安裝。 二、編譯jpeg庫 …

【數據倉庫面試題合集①】數據建模高頻面試題及解析

?? 面試官愛問什么?——核心考察點 數據建模作為數倉崗位面試的重頭戲,考察的不只是模型知識,更是對業務理解、抽象能力和工程落地經驗的綜合評估。常見題型可分為三類: 概念類:模型類型、建模方法論(如維度建模、范式建模) 場景類:給定一個業務場景進行模型設計(如…

園區無人機智能巡檢項目方案

在工業4.0與智慧園區建設加速推進的今天&#xff0c;傳統人工巡檢的局限性日益凸顯&#xff1a;效率低、覆蓋范圍有限、安全隱患大。而無人機智能巡檢技術的崛起&#xff0c;正以其 "高空視角AI大腦全自動作業" 的創新模式&#xff0c;重新定義園區管理標準。本文將深…

【C++】vector:容器的別樣風采

目錄 vector&#xff1a; vector實例化&#xff1a; vector構造函數&#xff1a; vector對象尾插&#xff1a;v1.push_back() vector迭代器&#xff1a; vector實例化string類型的對象 vector接口: begin()end()//rbegin()rend() resize()&#xff1a; vector&#xff…