LeetCode( 435) 無重疊區間

2022-07-13 11:21:14 字數 1369 閱讀 2740

本題為leetcode第435題,是一道貪心演算法相關的演算法題,難度中等。

給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意:

可以認為區間的終點總是大於它的起點。

區間 [1,2] 和 [2,3] 的邊界相互「接觸」,但沒有相互重疊。

示例1:

// 移除 [1,3] 

input: [ [1,2], [2,3], [3,4], [1,3] ]

output: 1

示例2:

// 移除兩個 [1,2] 

input: [ [1,2], [1,2], [1,2] ]

output: 2

本題求解移除區間的最小數量,是一道求最優解的演算法題,並且綜合考慮所有區間是否重疊比較複雜,可以分成兩個兩個地考慮,因此可以使用貪心演算法。

在選擇要保留的區間時,保留的區間的結尾越小,留給後面區間的空間就越大,就能夠保留更多的區間,因此可以將題目要求轉化為求解保留區間的最大數量,貪心策略為:將區間按照結尾大小進行公升序排序,優先選擇結尾小的區間以及不與其重疊的下乙個區間

示例:int interval = [ [1,2], [2,3], [3,4], [1,3] ]

按照結尾大小進行公升序排序;int interval = [ [1,2], [1,3], [2,3], [3,4]]

分析 [1,2] 與 [1,3] 是否重疊 ;

重疊,則移除 [1,3] ,分析 [1,2] 與 [2,3] 是否重疊;

不重疊,因此保留 [2,3];

分析 [2,3] 和 [3,4] 是否重疊;

不重疊,則保留 [3,4];

最終保留區間的最大數量為3,最少移除4-3 = 1個區間。int interval = [ [1,2], [2,3], [3,4] ]

class solution 

});// lambda表示式: arrays.sort(intervals, (a,b)-> a[1]-b[1]);

int count = 1;

int end = intervals[0][1];

for(int i = 1; i < intervals.length; i++)

}return intervals.length - count;}}

leetcode 435 無重疊區間

給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 移除 1,3 後,剩下的區間沒有重疊。輸入 1,2 1,2 1,2 輸出 2 解釋 你需要移除兩個 1,2 來使剩下的區間沒有重疊。輸入 1,2 2,3 輸出 0 解釋 你不需要...

leetcode435無重疊空間

給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。示例 1 輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 移除 1,3 後,剩下的區間沒有重疊。示例 2 輸入 1,2 1,...

LeetCode 435 無重疊區間

這道題目是在給定的集合中找到需要去掉的區間最小數量,使得剩餘區間互相不重疊,題目如下 這道題目似乎無從下手,因為找重疊的區域確實是比較麻煩的。我們可以嘗試用貪心演算法來解答這個問題,我們假設有集合 int erva ls 1,2 3 5 2,3 3 6 7,8 6 7 intervals 1,2 3...