leetcode 435. Non-overlapping Intervals (贪心)

来源:互联网 发布:大数据时代的思维变革 编辑:程序博客网 时间:2024/06/05 23:42

题意:

给你几个区间,删除最少的区间个数,使得这几个区间不重叠。边界可以忽略。

思路:

有重叠的情况下,尽量使得区间分散一些。先把区间按左端点升序,如果相同,按右端点升序。从左端最小的开始放。如果左端点相同,删除右端点较长的区间。否则如果当前左端点比上一个区间的右端点小,删除右端点较长的区间。

代码:

bool cmp(Interval a,Interval b){    if(a.start==b.start)        return a.end<b.end;    return a.start<b.start;}class Solution {public:    int eraseOverlapIntervals(vector<Interval>& intervals) {        int n = intervals.size();        if(n<2)            return 0;        sort(intervals.begin(),intervals.end(),cmp);        int s = intervals[0].start,e = intervals[0].end;        int ans = 0;        for(int i = 1;i<n;i++)        {            if(intervals[i].start==s)            {                ans++;            }            else if(intervals[i].start<e)            {                if(intervals[i].end>e)                    ans++;                else                {                    s = intervals[i].start;                    e = intervals[i].end;                    ans++;                }            }            else            {                s = intervals[i].start;                e = intervals[i].end;            }        }        return ans;    }};