题目描述
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].
解题思路
先对区间根据第一个元素进行排序。 然后每次判断下一个区间是否和当前区间有交集,若有,则扩展区间。否则,说明当前区间终止,结束当前区间并开始一个新的区间。 注意,此题使用的是闭区间。
AC代码
class Solution {
public:
static bool compareFn(
const Interval& i1,
const Interval& i2) {
return (i1.start < i2.start || (i1.start == i2.start && i1.end < i2.end));
}
vector<Interval> merge(
vector<Interval>& intervals) {
vector<Interval> ans;
if (intervals.empty())
return ans;
sort(intervals.begin(), intervals.end(), compareFn);
for (
int idx =
0; idx < intervals.size(); ++idx) {
int start = intervals[idx].start;
int end = intervals[idx].end;
int nextIdx = idx +
1;
for (; nextIdx < intervals.size(); ++nextIdx) {
if (intervals[nextIdx].start <= end) {
end = max(end, intervals[nextIdx].end);
}
else {
Interval v(start, end);
ans.push_back(v);
break;
}
}
if (nextIdx >= intervals.size()) {
Interval v(start, end);
ans.push_back(v);
}
idx = nextIdx -
1;
}
return ans;
}
};
转载请注明原文地址: https://ju.6miu.com/read-3293.html