C 刷題 leetcode貪心系列 二

2021-10-22 04:48:27 字數 1444 閱讀 3311

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

注意

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

區間 [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刷題系列(六)貪心演算法

在某乙個標準下,優先考慮最滿足標準的樣本,最後考慮最不滿足標準的樣本,最終得到乙個答案的演算法,叫作貪心演算法。也就是說,不從整體最優上加以考慮,所做出的是在某種意義上的區域性最優解。如何從區域性最優達到全域性最優解?舉反例和對數器來進行證明。對於給定的糖果和孩子胃口,看能最多滿足多少孩子。解題思路...