[Java惡補day14] 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 <= 10 4 10^4 104
intervals[i].length == 2
0 <= starti <= endi <= 10 4 10^4 104


知識點:
數組、排序


解:
因為需要合并若干個區間,因此對左端點進行升序排序,使用到lambda表達式

對于每個區間,左端點表示這個區間的起始下標,右端點表示這個區間的結束下標

定義一個列表,存儲結果,列表的每個元素都是一個int類型的一維數組。

對于intervals的每個元素(即:每一行),按照以下步驟進行:
①獲取當前結果列表res的大小
②若當前結果列表res沒有元素,表示我們直接原始數組的第一行加入這個結果列表res
③若當前結果列表res有元素,且最后一個元素的右端點≥當前遍歷的元素的左端點,如:[1, 3]與[2, 5],表明需要合并區間。因為這個區間已經在結果列表res中,我們做的就是替換這個區間在res的相應左端點:獲取更大的結束下標。對于這個例子而言,最大的結束下標是5,也就是p[1],因此讓結果列表res中的最后一個元素的右端點更新為這個5。若[1, 4]與[2, 3],則最大的結束下標是4,也就是res.get(len-1)[1],因此結果列表res中的最后一個元素的右端點更新為這個4。
④若當前結果列表res有元素,但最后一個元素的右端點<當前遍歷的元素的左端點,則表明無法與當前正在處理的結果列表中的最后一個區間進行合并,那就往res新增一個元素。

最后,我們將List列表,通過.toArray()轉為數組,返回。

時間復雜度: O ( n l o g n ) O(nlog n) O(nlogn)Arrays.sort()平均耗時 O ( n l o g n ) O(nlog n) O(nlogn)
空間復雜度: O ( 1 ) O(1) O(1)。排序的棧開銷和返回值不計入

class Solution {public int[][] merge(int[][] intervals) {List<int[]> res = new ArrayList<>(); //最后一個元素表示正在合并的區間//原始數據按第一列進行排序Arrays.sort(intervals, (o1, o2) -> (o1[0] - o2[0]));//遍歷每一行for (int[] p : intervals) {//獲取當前結果列表的大小int len = res.size();//若結果列表有元素,且可合并if (len > 0 && res.get(len - 1)[1] >= p[0]) {//更新右端點最大值res.get(len - 1)[1] = Math.max(res.get(len - 1)[1], p[1]);}//無法合并else {//添加新的合并區間res.add(p);}}//列表轉數組并返回return res.toArray(new int[res.size()][]);}
}

參考:
1、靈神解析
2、java二維數組排序

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

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

相關文章

DiskGenius專業版v6.0.1.1645:分區管理、數據恢復、備份還原,一應俱全!

各位小伙伴&#xff0c;大家好&#xff01;今天阿燦給大家帶來一款超好用的分區工具&#xff0c;DiskGenius專業版。這款工具堪稱電腦管理界的“瑞士軍刀”&#xff0c;功能強大&#xff0c;現在出了新版本v6.0.1.1645&#xff0c;簡繁中文單文件便攜版&#xff0c;使用超方便。…

azure web app創建分步指南系列之二

為注冊表授權托管標識 你創建的托管標識尚未獲得從容器注冊表中提取數據的授權。在此步驟中,你將啟用授權。 返回容器注冊表的管理頁面: 在左側導航菜單中,選擇“訪問控制 (IAM)”。選擇“添加角色分配”。此屏幕截圖顯示了如何為容器注冊表啟用添加角色分配。在角色列表中…

STM32 AD單通道與多通道實戰指南

文章目錄 AD單通道&#xff08;實驗&#xff09;有關配置的庫函數AD單通道部分主要代碼 AD多通道實現多通道采集實現思路探討單次轉換非掃描模式實現AD多通道AD多通道部分代碼 學習建議&#xff1a;推薦搭配 江協科技 AD單通道 AD多通道一起食用&#xff01;&#xff01;&#…

溝通頻率不合適,如何找到平衡點

在團隊協作中&#xff0c;溝通頻率過高、信息干擾、節奏錯位常常導致效率下降與成員倦怠。PMI研究指出&#xff0c;溝通不當是75%項目延誤的根源&#xff0c;其中溝通頻率失衡是關鍵變量之一。要解決這一問題&#xff0c;關鍵在于設定節奏、分層溝通、制定協議。其中&#xff0…

EC2 實例詳解:AWS 的云服務器怎么玩???

彈性計算、靈活計費、全球可用&#xff0c;AWS EC2 全攻略 在 AWS 生態中&#xff0c;有兩個核心服務是非常關鍵的&#xff0c;一個是 S3&#xff08;對象存儲&#xff09;&#xff0c;另一個就是我們今天的主角 —— Amazon EC2&#xff08;Elastic Compute Cloud&#xff09…

lvs-keepalived高可用群集

目錄 1.Keepalived 概述及安裝 1.1 Keepalived 的熱備方式 1.2 keepalived的安裝與服務控制 &#xff08;1&#xff09;安裝keep alived (2)控制 Keepalived 服務DNF 安裝 keepalived 后,執行以下命令將keepalived 服務設置為開機啟動。 2.使用 Keepalived 實現雙機熱備 …

車載診斷架構SOVD --- 車輛發現與建連

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

BUUCTF之[ACTF2020 新生賽]BackupFile

打開環境就一句話 找出源文件! 結合題目名字&#xff1a;BackupFile 先用dirsearct掃描網站文件 發現一個index.php.bak ,拼接url下載 打開發現php代碼 <?php include_once "flag.php";if(isset($_GET[key])) {$key $_GET[key];if(!is_numeric($key)) {exit…

Rag技術----項目博客(六)

RAG 定義&#xff1a;檢索增強生成&#xff08;Retrieval Augmented Generation&#xff09;&#xff0c;簡稱 RAG&#xff0c;已經成為當前最火熱的LLM應用方案。 目的&#xff1a;通過提供相關領域數據庫通過問題檢索信息&#xff0c;將相關信息合并到Prompt中&#xff0c;…

設計模式——外觀設計模式(結構型)

摘要 本文介紹了外觀設計模式&#xff0c;它是一種結構型設計模式&#xff0c;通過引入一個外觀類來封裝復雜子系統的調用細節&#xff0c;對外提供簡單統一的接口。文中通過生活類比、關鍵角色介紹、使用場景分析以及結構說明等方面對這一模式進行了全面闡述&#xff0c;還涉…

LabVIEW磁懸浮軸承傳感器故障識別

針對工業高端裝備中主動磁懸浮軸承&#xff08;AMB&#xff09;的位移傳感器故障檢測需求&#xff0c;基于 LabVIEW 平臺構建了一套高精度故障識別系統。通過集成品牌硬件與 LabVIEW 的信號處理能力&#xff0c;實現了傳感器探頭故障的實時監測與精準定位&#xff0c;解決了傳統…

集成學習三種框架

集成學習通過組合多個弱學習器構建強學習器&#xff0c;常見框架包括Bagging&#xff08;裝袋&#xff09;、Boosting&#xff08;提升&#xff09; 和Stacking&#xff08;堆疊&#xff09; 一、Bagging&#xff08;自助裝袋法&#xff09; 核心思想 從原始數據中通過有放回…

PCI DSS培訓記錄

22日上午: 整體PCI DSS 結構分享VISA分享全球欺詐風險動態 信用卡被偷枚舉攻擊依然是最為主要的安全威脅之一(枚舉驗證碼),增加3DS驗證防護勒索軟件和信息泄漏攻擊欺詐分子對AI技術的興趣日益增加,如換臉軟件過驗證基于NFC技術利用非接交易進行欺詐成為新的攻擊手段,如NF…

數據安全中心是什么?如何做好數據安全管理?

目錄 一、數據安全中心是什么 &#xff08;一&#xff09;數據安全中心的定義 &#xff08;二&#xff09;數據安全中心的功能 1. 數據分類分級 2. 訪問控制 3. 數據加密 4. 安全審計 5. 威脅檢測與響應 二、數據安全管理的重要性 三、如何借助數據安全中心做好數據安…

黑馬Java面試筆記之 微服務篇(業務)

一. 限流 你們項目中有沒有做過限流?怎么做的? 為什么要限流呢? 一是并發的確大(突發流量) 二是防止用戶惡意刷接口 限流的實現方式: Tomcat:可以設置最大連接數 可以通過maxThreads設置最大Tomcat連接數,實現限流,但是適用于單體架構 Nginx:漏桶算法網關,令牌桶算法自定…

PostgreSQL的擴展 passwordcheck

PostgreSQL的擴展 passwordcheck passwordcheck 是 PostgreSQL 內置的一個密碼復雜度檢查擴展&#xff0c;用于強制實施基本的密碼策略。 一、擴展概述 功能&#xff1a;在創建或修改用戶密碼時檢查密碼復雜度目的&#xff1a;防止使用過于簡單的密碼適用版本&#xff1a;Po…

Go語言學習-->編譯器安裝

Go語言學習–&#xff1e;編譯器安裝 Go采用的是UTF-8編碼的文本文件存放源代碼&#xff0c;理論上使用任何一款文本編輯器都可以做Go語言開發。這里推薦使用VS Code和Goland。 VS Code是微軟開源的編輯器&#xff0c;而Goland是jetbrains出品的付費IDE。我們這里使用VS Code …

基于Android的一周穿搭APP的設計與實現 _springboot+vue

開發語言&#xff1a;Java框架&#xff1a;springboot AndroidJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat12開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.6 系統展示 APP登錄 A…

井字棋——ai PK you

挑戰人工智能&#xff0c;體驗經典井字棋的對決&#xff01;AI 擁有強大的邏輯計算能力&#xff0c;每一步都經過精準推演。你能戰勝它嗎&#xff1f;還是會被 AI 徹底碾壓&#xff1f; 特點&#xff1a; 智能 AI&#xff0c;難度可調 極簡界面&#xff0c;快速上手 實時勝負…

關于easyx頭文件

一、窗口創建 &#xff08;1&#xff09;幾種創建方式 #include<easyx.h>//easyx的頭文件 #include<iostream> using namespace std;int main() {//創建一個500*500的窗口//參數為&#xff1a;長度&#xff0c;寬度&#xff0c;是否顯示黑框&#xff08;無參為不…