1. 程式人生 > 程式設計 >C#6.0新語法示例詳解

C#6.0新語法示例詳解

技術標籤:每日一題LeetCode

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

注意:

可以認為區間的終點總是大於它的起點。
區間 [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

解釋: 你不需要移除任何區間,因為它們已經是無重疊的了。

解答

之前刷過一次了435. 無重疊區間。貪心,將區間按右邊界排序,要使不重疊的區間更多,需要當前不重疊區間的右邊界儘可能小,然後依次將不重疊的區間計數:

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        if(intervals.size() < 2)
            return 0;
        sort(intervals.begin(), intervals.end(), [](const vector<
int>& a, const vector<int>& b){ return a[1] <= b[1]; }); // 記錄當前不相交區間的右邊界 int end = intervals[0][1]; int count = 1; for(const auto& interval : intervals){ if(interval[0] >= end){ end = interval[1]; count++; }
} return intervals.size() - count; } };