题目如下
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
首先对所有的interval进行排序,这里需要重载sort的比较操作符。
其次对所有的interval逐个进行处理,考虑的情况比较多,需要比较已压入结果中的end与当前interval的end谁比较大。
class Solution
{
public:
//这道题需要排序,则需要使用sort,需要重新定义比较操作符
static bool comp(Interval &a, Interval &b)
{
return a.start < b.start;
}
vector<Interval> merge(vector<Interval> & intervals)
{
vector<Interval> res;
if (intervals.empty())
return res;
int n = intervals.size();
//按start进行排序
sort(intervals.begin(), intervals.end(), comp);
int s = intervals[0].start;
int i = 1;
int tempend = intervals[0].end;
while (i<n)
{
if (intervals[i].start <= tempend)
{
tempend = max(tempend, intervals[i].end);
i++;
}
else
{
Interval temp=Interval(s, tempend);
res.push_back(temp);
//这里重新开始一个间隔,应当比较temp与之后的值
s = intervals[i].start;
tempend = max(intervals[i].end,tempend);
i++;
}
}
tempend = max(tempend,intervals[i - 1].end);
Interval temp = Interval(s, tempend);
res.push_back(temp);
return res;
}
};