435. Non-overlapping Intervals(贪心)

来源:互联网 发布:linux sort k 编辑:程序博客网 时间:2024/06/07 13:24

https://leetcode.com/problems/non-overlapping-intervals/description/

题目:求最少删除的区间数目,使得区间不重叠。

思路:活动安排问题的变形,求出最多可以保留多少区间,然后用总的区间减去保留数目即可。贪心算法,将所有区间按右边界升序排序,如果当前区间的最左边的值大于等于已保留的最右边区间的值,则保留当前区间。

if(intervals[x].start>=r) sum++,r=intervals[x].end;

sort中使用的是 Lambda函数: (c++11)

 [](Interval a,Interval b) {  return a.end<b.end ; }
/** * Definition for an interval. * struct Interval { *     int start; *     int end; *     Interval() : start(0), end(0) {} *     Interval(int s, int e) : start(s), end(e) {} * }; */class Solution {public:    int eraseOverlapIntervals(vector<Interval>& intervals) {        int len=intervals.size();        if(len<=1) return 0;       sort(intervals.begin(),intervals.end(),[](Interval a,Interval b){  return a.end<b.end;});          int sum=1,r=intervals[0].end;        for(int x=1;x<len;x++)            if(intervals[x].start>=r) sum++,r=intervals[x].end;        return len-sum;    }};