Given an array of intervals
where intervals[i] = [starti, endi]
, merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Example 1:
Input: intervals = [[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].
Example 2:
Input: intervals = [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considered overlapping.
Constraints:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
Similar Questions:
- Insert Interval (Medium)
- Meeting Rooms (Easy)
- Meeting Rooms II (Medium)
- Teemo Attacking (Medium)
- Add Bold Tag in String (Medium)
- Range Module (Hard)
- Employee Free Time (Hard)
- Partition Labels (Medium)
- Interval List Intersections (Medium)
// OJ: https://leetcode.com/problems/merge-intervals/
// Author: github.com/lzl124631x
// Time: O(NlogN)
// Space: O(1)
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& A) {
sort(begin(A), end(A));
vector<vector<int>> ans;
for (auto &v : A) {
if (ans.empty() || v[0] > ans.back()[1]) ans.push_back(v);
else ans.back()[1] = max(ans.back()[1], v[1]);
}
return ans;
}
};