方法:
1、将数组按照区间的起点从小到大的顺序进行排序;
2、对排序后数组遍历,如果后一个区间的起点不大于前面一个区间的末尾,说明这两个区间可以合并;否则就不能合并存入数组即可。
时间复杂度:o(nlog2n),排序的复杂度为o(nlog2n),后续遍历所有区间的复杂度为o(n)
空间复杂度:o(n)
class Solution { public: // 重载 static bool cmp(Interval& a, Interval& b) { return a.start < b.start; } vector<Interval> merge(vector<Interval>& intervals) { vector<Interval> res; if (intervals.size() == 0) return res; // 排序 sort(intervals.begin(), intervals.end(), cmp); res.push_back(intervals[0]); for (int i = 1; i < intervals.size(); i++) { if (res.back().end >= intervals[i].start) { res.back().end = max(res.back().end, intervals[i].end); } else { res.push_back(intervals[i]); } } return res; } };