合并区间是按照start排序的。用最少的点覆盖所有区间是按照end排序的。选择最多课程是选择end排序的。每次处理的时候找找特例,就知道该怎么排序了,greedy策略
/**
* 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:
static bool cmp(Interval& a, Interval& b)
{
if(a.start<b.start)
return true;
else if(a.start==b.start&&a.end<b.end)
return true;
else
return false;
}
vector<Interval> merge(vector<Interval>& intervals) {
if(intervals.size()<=1)
return intervals;
sort(intervals.begin(),intervals.end(),cmp);
vector<Interval> result;
Interval temp=intervals[0];
int next=1;
while(next<intervals.size())
{
if(temp.end>=intervals[next].start)
{
temp.end=max(temp.end,intervals[next].end);
temp.start=min(temp.start,intervals[next].start);
next++;
}
else
{
result.push_back(temp);
temp=intervals[next];
next++;
}
}
result.push_back(temp);
return result;
}
};
本文介绍了一种基于贪心策略的区间合并方法,并详细解释了如何通过比较区间的起始点来完成合并操作。此外,还展示了如何利用C++实现这一算法,包括自定义比较函数和具体的合并过程。
516

被折叠的 条评论
为什么被折叠?



