LeetCode-數組-重疊、合并、覆蓋問題-中等難度

435. 無重疊區間

在這里插入圖片描述
我認為區間類的題型,大多數考驗的是思維能力,以及編碼能力,該類題型本身并無什么算法可言,主要是思維邏輯,比如本題實際上你只需要能夠總結出重疊與不重疊的含義,再加上一點編碼技巧,便可完成。

解題思路

正如前面所說,那么解題的關鍵思路就在于找到重疊區間的特性即可,我們不妨先按照start進行一次排序,再進行觀察,比如數組:[[1,2],[2,3],[3,4],[1,3]],排序后為:[[1,2],[1,3],[2,3],[3,4]],通過觀察我們很容易發現,如果前一個數組的end大于下一個數組的start,則這兩個數組一定發生了重疊,這個比較容易理解,如圖所示:分別有兩個數組[1,2][1,3]
在這里插入圖片描述
重疊部分一眼可見,但關鍵在于產生重疊后,應該留下誰?舍棄誰?我們不妨還是畫圖理解,按照題目示例,接下來一組數字是[2,3]
在這里插入圖片描述
我們可以分開討論,假設我們選擇保留[1,3],那么很明顯下一組[2,3]將變為重疊部分。
在這里插入圖片描述
而如果我們選擇保留[1,2],則不會再產生重疊部分。
在這里插入圖片描述

根據題目要求,需要我們通過移除最少的區間數量來實現區間互不重疊,因此應當使用第二種方案,從原理上來說,就是當兩個區間產生重疊后,我們應當保留區間范圍更小的一組,因為這樣更有可能避免與后面的區間再產生重疊(很容易理解的一點概念:區間范圍越大,越容易發生重疊

結論,假設有[[s1, e1], [s2, e2], [s3, e3] ... [sn, en]],如果e1 > s2,則將觸發[s1 ,e1],[s2, e2]合并,合并規則為:如果e1 > e2,合并為[s1, e2],否則合并為[s1, e1],如果e1 <= s2,則無需合并,直接檢查下一個區間即可。

代碼實現

public int eraseOverlapIntervals(int[][] intervals) {// 不要忘了,先按start進行排序Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);int ans = 0;int end = intervals[0][1];for(int i = 1; i < intervals.length; i++){int start = intervals[i][0];if(end > start){end = Math.min(end, intervals[i][1]);ans++;}else{end = intervals[i][1];}}return ans;
} 

56. 合并區間

在這里插入圖片描述

解題思路

本題與上一題比較相似,都是處理重疊區間的問題,我們同樣可以畫圖理解,以題目示例1為例:[[1,3],[2,6],[8,10],[15,18]]

在這里插入圖片描述
首先與前一題一樣,如果前一個數組的end大于下一個數組的start,則表示一定出現了重疊,而關于end部分的去留,則正好與前一題相反,前一題保留的是較小部分,本題則需要保留較大部分。

結論,假設有[[s1, e1], [s2, e2], [s3, e3] ... [sn, en]],如果e1 >= s2,則將觸發[s1 ,e1],[s2, e2]合并,合并規則為:如果e1 > e2,合并為[s1, e1],否則合并為[s1, e2],如果e1 < s2,則無需合并,直接檢查下一個區間即可。

代碼實現

由于本題需要在原數組上進行修改,因此先借用一個list輔助記錄,實際處理邏輯并沒區別。

class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);List<int[]> list = new ArrayList<>();list.add(new int[]{intervals[0][0], intervals[0][1]});for(int i = 1; i < intervals.length; i++){int start = intervals[i][0];int end = intervals[i][1];if(list.get(list.size()-1)[1] < start){list.add(new int[]{start, end});}else{list.get(list.size()-1)[1] = Math.max(end, list.get(list.size()-1)[1]);}}return list.toArray(new int[list.size()][]);}
}

1288. 刪除被覆蓋區間

在這里插入圖片描述

解題思路

前面兩題處理的都是數據范圍重疊的問題,本題要解決的則是數據范圍覆蓋問題,我們先要搞清楚符合覆蓋的條件有哪些?很明顯,當s1 <= s2 且 e2 <= e1時,則認為[s2, e2]區間被[s1, e1]區間覆蓋。

如下圖所示:
在這里插入圖片描述

結論,假設有[[s1, e1], [s2, e2], [s3, e3] ... [sn, en]],當s1 <= s2 且 e2 <= e1時,則可刪除區間[s2, e2],這里需要注意的是,為了方便處理,我們可以讓start按照升序排序的同時,并讓end按照降序排序,這樣代碼實現時只要滿足e1 >= e2即可認為被覆蓋了。實際上就是為了方便進行判斷s1 <= s2 且 e2 <= e1

代碼實現

class Solution {public int removeCoveredIntervals(int[][] intervals) {Arrays.sort(intervals, (o1, o2) -> o1[0] == o2[0] ? o2[1] - o1[1] : o1[0] - o2[0]);int cnt = 0;int preEnd = intervals[0][1];for (int i = 1; i < intervals.length; i++) {int curEnd = intervals[i][1];if (preEnd >= curEnd) {cnt++;} else {preEnd = curEnd;}}return intervals.length - cnt;}
}

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

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

相關文章

go-zero開發入門-API服務開發示例

接口定義 定義 API 接口文件 接口文件 add.api 的內容如下&#xff1a; syntax "v1"info (title: "API 接口文件示例"desc: "演示如何編寫 API 接口文件"author: "一見"date: "2023年12月07日"version: "…

Spring Boot 優雅地處理重復請求

前 言 對于一些用戶請求&#xff0c;在某些情況下是可能重復發送的&#xff0c;如果是查詢類操作并無大礙&#xff0c;但其中有些是涉及寫入操作的&#xff0c;一旦重復了&#xff0c;可能會導致很嚴重的后果&#xff0c;例如交易的接口如果重復請求可能會重復下單。 重復的場…

Verilog基礎:$random系統函數的使用

相關閱讀 Verilog基礎?編輯https://blog.csdn.net/weixin_45791458/category_12263729.html $random系統函數語法的BNF范式如下所示&#xff0c;有關BNF范式相關內容&#xff0c;可以瀏覽以往文章Verilog基礎&#xff1a;巴科斯范式(BNF)。 $random系統函數在每次調用時返回一…

【IDEA】IntelliJ IDEA中進行Git版本控制

本篇文章主要記錄一下自己在IntelliJ IDEA上使用git的操作&#xff0c;一個新項目如何使用git進行版本控制。文章使用的IDEA版本 IntelliJ IDEA Community Edition 2023.3&#xff0c;遠程倉庫為https://gitee.com/ 1.配置Git&#xff08;File>Settings&#xff09; 2.去Git…

[gRPC實現go調用go]

1什么是RPC RPC&#xff1a;Remote Procedure Call&#xff0c;遠程過程調用。簡單來說就是兩個進程之間的數據交互。正常服務端的接口服務是提供給用戶端(在Web開發中就是瀏覽器)或者自身調用的&#xff0c;也就是本地過程調用。和本地過程調用相對的就是&#xff1a;假如兩個…

深度優先遍歷(DFS)

時間復雜度與深搜一致&#xff1b;

STM32 定時器總結

縮寫 ARR: Auto-Reload Register&#xff08;保存定時器的計數范圍&#xff09; PSC: Prescaler register&#xff08;預分頻器寄存器&#xff0c;根據設置的分頻因子N&#xff0c;計數N個定時器時鐘脈沖后&#xff0c;產生一個CNT計數&#xff0c;以此實現分頻功能&#xff0…

LeetCode 2048. 下一個更大的數值平衡數

一、題目 1、題目描述 如果整數 x 滿足&#xff1a;對于每個數位 d &#xff0c;這個數位 恰好 在 x 中出現 d 次。那么整數 x 就是一個 數值平衡數 。 給你一個整數 n &#xff0c;請你返回 嚴格大于 n 的 最小數值平衡數。 0 < n < 1e6 2、接口描述 public:int nextB…

Android渲染-AHardwareBuffer

本文主要從應用的角度介紹android的native層AHardwareBuffer創建紋理以及保存渲染數據。 HardwareBuffer 要介紹native層的AHardwareBuffer&#xff0c;就需要先從Java層的HardwareBuffer說起。Android官方對于HardwareBuffer介紹如下&#xff1a; HardwareBuffer wraps a na…

HttpURLConnection OOM問題記錄

使用HttpURLConnection 上傳大文件&#xff0c;會出現內存溢出問題&#xff1a; 觀察HttpURLConnection 源碼&#xff1a; Overridepublic synchronized OutputStream getOutputStream() throws IOException {connecting true;SocketPermission p URLtoSocketPermission(th…

【接口分享】熱門好用的API,含免費次數

語音驗證碼短信&#xff1a;撥打電話告知用戶驗證碼&#xff0c;實現信息驗證。短信驗證碼&#xff1a;可用于登錄、注冊、找回密碼、支付認證等等應用場景。支持三大運營商&#xff0c;3秒可達&#xff0c;99.99&#xff05;到達率&#xff0c;支持大容量高并發。通知短信&…

基于SSM的點餐系統的設計與實現

末尾獲取源碼 開發語言&#xff1a;Java Java開發工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 數據庫&#xff1a;MySQL5.7和Navicat管理工具結合 服務器&#xff1a;Tomcat8.5 開發軟件&#xff1a;IDEA / Eclipse 是否Maven項目&#xff1a;是 目錄…

mysql設置為密碼登錄

要設置Ubuntu上的MySQL需要密碼登錄&#xff0c;你可以使用以下步驟&#xff1a; 打開終端。 輸入以下命令登錄到 MySQL 服務器&#xff1a; sudo mysql -u root -p按Enter后&#xff0c;系統會要求輸入密碼。如果是第一次登錄&#xff0c;你可能需要直接按Enter鍵&#xff08…

【已解決】解決UbuntuKali無法進行SSH遠程連接

目錄 Ubuntu20.04配置SSH遠程連接Kali Linux配置SSH遠程連接 Ubuntu20.04配置SSH遠程連接 首先更新安裝包 sudo apt-get update 下載SSH服務 sudo apt install openssh-server 查看SSH服務 service ssh status 打開 /etc/ssh/sshd_config文件修改配置文件 將PermitRootLog…

知識筆記(五十二)———MySQL 刪除數據表

MySQL中刪除數據表是非常容易操作的&#xff0c;但是你在進行刪除表操作時要非常小心&#xff0c;因為執行刪除命令后所有數據都會消失。 語法 以下為刪除 MySQL 數據表的通用語法&#xff1a; DROP TABLE table_name ; -- 直接刪除表&#xff0c;不檢查是否存在 或 DROP…

基于Debain安裝 Docker 和 Docker Compose

一、安裝Docker # 先升級一下系統 (Ubuntu / Debian 系) sudo apt-get update sudo apt-get upgrade# 如果你是 CentOS、紅帽系列則使用&#xff1a; yum update yum upgrade# 安裝 Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh二、Dock…

LeetCode 0070. 爬樓梯:動態規劃(遞推)

【LetMeFly】70.爬樓梯&#xff1a;動態規劃&#xff08;遞推&#xff09; 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/climbing-stairs/ 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#x…

NVIDIA Jetson NX ubuntu20.04刪除多余版本沖突的Boost庫

參考Ubuntu16.04 卸載舊版本Boost庫并安裝新版本 卸載 刪除/usr/local/include/boost文件夾&#xff0c;刪除/usr/local/lib中和boost有關的文件,以及/usr/local/lib/cmake/中boost的cmake文件 cd /usr/local/lib/ ls | grep boost sudo rm -rf /usr/local/include/boost su…

藍橋杯 day01 奇怪的數列 特殊日期

奇怪的數列 題目描述 奇怪的數列 從 X 星截獲一份電碼&#xff0c;是一些數字&#xff0c;如下&#xff1a; 13 1113 3113 132113 1113122113 ?? YY 博士經徹夜研究&#xff0c;發現了規律&#xff1a; 第一行的數字隨便是什么&#xff0c;以后每一行都是對上一行…

redis+springsecurity+mybtais-plus+JWT

redisspringsecuritymybtais-plusJWT 01 引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId&g…