方法:
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;
}
};

京公网安备 11010502036488号