🧩Algo 普通数组

56. 合并区间

难度:🟡 Medium | 标签:排序、数组 | 状态:⬜ LeetCode 链接

思路

按起点排序。维护当前合并段 [curL, curR],遇到新区间:

  • 起点 ≤ curR:合并,curR = max(curR, end)
  • 否则:把当前段推入答案,开新段

代码

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& a) {
        sort(a.begin(), a.end());
        vector<vector<int>> res;
        for (auto& it : a) {
            if (!res.empty() && it[0] <= res.back()[1]) {
                res.back()[1] = max(res.back()[1], it[1]);
            } else {
                res.push_back(it);
            }
        }
        return res;
    }
};

复杂度

  • 时间 O(n log n),空间 O(log n)(排序)

易错 / 回顾

  • 排序后才能贪心合并
  • 判合并是 <= 不是 <[1,4][4,5] 要合并)
  • res.back() 直接改而不是 pop + push,省一次拷贝
Related · 普通数组