56. 合并区间

给出一个区间的集合,请合并所有重叠的区间。 示例 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] 可被视为重叠区间。

解题思路

排序 双指针

排序 + 双指针
双指针 56. 合并区间 - 图1
56. 合并区间 - 图2 表示当前区间的开始,56. 合并区间 - 图3 表示下一个区间的开始,56. 合并区间 - 图4 表示连续区间的最右端点
1.jpg

  1. class Solution {
  2. public:
  3. vector<vector<int>> merge(vector<vector<int>>& intervals) {
  4. sort(intervals.begin(),intervals.end());
  5. vector<vector<int>> res;
  6. int len = intervals.size();
  7. for(int i = 0;i < len;) {
  8. int t = intervals[i][1];
  9. int j = i + 1;
  10. while(j < len && intervals[j][0] <= t) {//可以合并的区间
  11. t = max(t,intervals[j][1]);
  12. j++;
  13. }
  14. res.push_back({intervals[i][0],t});
  15. i = j;
  16. }
  17. return res;
  18. }
  19. };