给定一个数组的容器,将容器中的数组代表一个区间,如果有区间重叠的,将他们融合为一个大的区间,输出最终的区间。
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
思路:
先将容器排序,按照数组区间的起点排序,则处理起来就方便了。设区间的起点为start,区间终点为end,如果下一个区间的起点 next-start比当前区间的 end 小,且 next-end > end,则更新区间为:[ start , next-end ],反之:如果下一个区间的 next-start > end,则说明不能融合,将当前区间[start, end] 加入到结果容器中。
class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { if (intervals.empty() || intervals[0].size() == 0) return {}; vector<vector<int>> res; sort(intervals.begin(), intervals.end()); int n = intervals.size(), start = intervals[0][0], end = intervals[0][1]; for (int i = 0; i < n; i++) { if (intervals[i][0] <= end) { if(intervals[i][1] > end) end = intervals[i][1]; } else { res.push_back({ start,end }); start = intervals[i][0]; end = intervals[i][1]; } } res.push_back({ start,end }); return res; } };
原文:https://www.cnblogs.com/luo-c/p/12988810.html