//给出一组区间,请合并所有重叠的区间。
//请保证合并后的区间按区间起点升序排列。
//区间结构体
struct Interval
{
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
//比较结构:比较区间start的大小
struct cmp
{
inline constexpr bool operator()(Interval& lhs, Interval& rhs)
{
return lhs.start < rhs.start;
}
};
vector<Interval> merge(vector<Interval> &intervals)
{
int length = intervals.size();
vector<Interval> result;
if (length < 1) return result;
//首先对根据interval的start进行开始由小到大的排序。
std::sort(intervals.begin(), intervals.end(), cmp());
//设置当前区间
Interval temp = intervals[0];
for (int i = 1; i < length; ++i)
{
//当当前区间的temp.end小于intervals[i].start时,
//说明区间之间出现了空隔,则证明当前区间该结束了。
if (temp.end < intervals[i].start)
{
result.push_back(temp);
temp = intervals[i];
}
//当temp.end不小于intervals[i].start,但小于intervals[i].end时,
//则将当前区间的尾部延伸至intervals[i].end;
else if (temp.end < intervals[i].end)
{
temp.end = intervals[i].end;
}
}
result.push_back(temp);
return result;
}