給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。
注意
可以認為區間的終點總是大於它的起點。區間 [1,2] 和 [2,3] 的邊界相互「接觸」,但沒有相互重疊。
示例 1
輸入: [ [1,2], [2,3], [3,4], [1,3] ]輸出: 1
解釋: 移除 [1,3] 後,剩下的區間沒有重疊。
示例 2
輸入: [ [1,2], [1,2], [1,2] ]輸出: 2
解釋: 你需要移除兩個 [1,2] 來使剩下的區間沒有重疊。
示例 3
輸入: [ [1,2], [2,3] ]輸出: 0
解釋: 你不需要移除任何區間,因為它們已經是無重疊的了
在選擇要保留的區間時,區間的結尾十分重要,選擇的結尾越小,就能盡可能多的保留更多的區間,因此我們貪心策略是優先保留結尾小且不相交的區間。具體方法為先按照區間最後乙個元素進行公升序排序,每次選擇結尾最小且和前面區間不重疊的區間。這裡排序我們使用lambda函式結合std:sort()進行排序。
class
solution
int erase_num =0;
#對二維陣列按照第1維進行公升序排序
sort
(intervals.
begin()
,intervals.
end(),
(vector<
int>
&a,vector<
int>
&b))
;int size = intervals.
size()
; #最小結尾
int initial = intervals[0]
[1];
for(
int i=
0;i1;i++
) #若無交集,則最小結尾指向下乙個區間的結尾
else
}return erase_num;}}
;
C 刷題 leetcode貪心系列 一
1.老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。2.你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。3.評分更高的孩子必須比他兩側的鄰位孩子獲得更多的糖果。4.那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸...
C 刷題 leetcode貪心系列 四
字串 s 由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同一字母最多出現在乙個片段中。返回乙個表示每個字串片段的長度的列表。示例 輸入 s ababcbacadefegdehijhklij 輸出 9,7,8 解釋 劃分結果為 ababcbaca defegde hijhklij 每個字母最多...
Leetcode刷題系列(六)貪心演算法
在某乙個標準下,優先考慮最滿足標準的樣本,最後考慮最不滿足標準的樣本,最終得到乙個答案的演算法,叫作貪心演算法。也就是說,不從整體最優上加以考慮,所做出的是在某種意義上的區域性最優解。如何從區域性最優達到全域性最優解?舉反例和對數器來進行證明。對於給定的糖果和孩子胃口,看能最多滿足多少孩子。解題思路...