给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ class Solution { public: //结构体不是我们定义的,所以没办法写到内部里面。通常都是写operator< 再写一个全局函数 static bool comp(const Interval &a, const Interval &b) { return (a.start < b.start); } vector<Interval> merge(vector<Interval> &intervals) { vector<Interval> res; if (intervals.empty()) return res; sort(intervals.begin(), intervals.end(), comp);//排序[1,3],[2,6],[8,10],[15,18], 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; } };