435. 无重叠区间(贪心算法)
給定一個區間的集合,找到需要移除區間的最小數量,使剩余區間互不重疊。
注意:
可以認為區間的終點總是大于它的起點。
區間 [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
解釋: 你不需要移除任何區間,因為它們已經是無重疊的了。
這道題有些難度,官方解法給了一個動態規劃一個貪心,這里就說說貪心如何做;
首先應該想到的是對這個二維數組進行排序,是以左邊界排序好還是以右邊界排序好呢?
題目讓求移除區間的最小數量,那么
如果以左邊界排序,就得從右向左遍歷,每次找左邊界最大的,這樣就留給前一個的空間最大;
如果以右邊界排序,就得從左向右遍歷,每次找右邊界最小的,留給下一個區間的空間就最大;
這里我用的是以右邊界排序,從左向右記錄非交叉區間的個數。最后用 區間總數 減去 非交叉區間的個數 就是需要移除的區間個數了;
局部最優:優先選擇右邊界最小的,給下一個區間留下更大的空間;
全局最優:得到最多的非交叉區間;
就拿示例一來說:如圖,end是最小右邊界,ans是非交叉區間的個數
代碼如下:
總結
以上是生活随笔為你收集整理的435. 无重叠区间(贪心算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈希表(散列表)知识点概述
- 下一篇: 738. 单调递增的数字(贪心算法)