题意为输入多条线段(间隔),将重叠的线段合并。
将Intervals以start为标准排升序,初始化第一个Interval为pre. 向后遍历:
若当前线段和之前的pre出现重叠,则将他们合为一个pre, 继续下一次迭代;
若不重叠,则将pre压入返回值,并将其赋值为当前的线段。
代码:
bool cmp(const Interval& a, const Interval& b)
{
if (a.start != b.start)
{
return a.start < b.start;
} else
{
return a.end < b.end;
}
}
class Solution
{
public:
vector<Interval> merge(vector<Interval> &intervals)
{
if (intervals.empty() == true)
{
return vector<Interval>();
}
vector<Interval> ret;
Interval pre = intervals[0];
sort (intervals.begin(), intervals.end(), cmp);
for (size_t i = 1; i < intervals.size(); ++ i)
{
if (pre.end < intervals[i].start)
{
ret.push_back( pre );
pre = intervals[i];
} else if (pre.end>=intervals[i].start && pre.end<=intervals[i].end)
{
pre.end = intervals[i].end;
}
}
ret.push_back( pre );
return ret;
}
};