给出若干闭合区间,合并所有重叠的部分。
给出的区间列表 => 合并后的区间列表:
[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ]
]
代码:/** * Definition of Interval: * classs Interval { * int start, end; * Interval(int start, int end) { * this->start = start; * this->end = end; * } */ class Solution { public: /** * @param intervals: interval list. * @return: A new interval list. */ static bool cmp(const Interval &a, const Interval &b) { return a.start < b.start; } vector<Interval> merge(vector<Interval> &intervals) { // write your code here vector<Interval> qq; int n = intervals.size(); if (n < 1) { return qq; } sort(intervals.begin(), intervals.end(), cmp); int left = intervals[0].start; int right = intervals[0].end; for (int i = 1; i < n; i++) { if (intervals[i].start <= right) { right = max(right, intervals[i].end); } else { qq.push_back(Interval(left, right)); left = intervals[i].start; right = intervals[i].end; } } qq.push_back(Interval(left, right)); return qq; } };
感想:本题难点在于先按照区间第一个数字大小排序,然后写一个比较函数来判断区间是否重叠,若重叠,则在一个新的数组中加上修改后的数组,直到没有
重叠的区间。