Leetcode 435. 無重疊區間 (經典區間貪心問題)

貪心的方式是按照區間右端點排序,遇到區間能選就選,不能選則略過去,(爲什麼要按右端點排序,因爲我們貪心的認爲,區間最早結束,那麼收益越高)

如何證明我們的貪心解一定是最優解?

首先貪心解是滿足題意的一組解,其次假設一個最優解不是貪心解,一定可以按貪心的方式調整爲最優解

 

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        if(intervals.size()==0) return 0;
        sort(intervals.begin(),intervals.end(),[](vector<int> &a, vector<int> &b){
            return a[1]<b[1];
        });
        int count = 1, right = intervals[0][1];
        for(auto interval:intervals){
            if(interval[0]>=right){
                count++;
                right = interval[1];
            }
        }
        return intervals.size()-count;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章