212 字
1 分钟
56. 合并区间

56. 合并区间#

题目:https://leetcode.cn/problems/merge-intervals/

思路#

先遍历一遍 intervals 数组,然后在范围中的值都标记为已涵盖,然后第二次遍历依次收集即可。

出现问题,边界问题处理不了。。。

正确思路:先按左端点排序,然后收集即可。

代码#

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        ranges::sort(intervals);

        vector<vector<int>> ans;
        for (auto& p : intervals) {
            if (!ans.empty() && p[0] <= ans.back()[1]) {
                ans.back()[1] = max(ans.back()[1], p[1]);
            } else {
                ans.emplace_back(p);
            }
        }
        return ans;
    }
};
class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals, (p, q) -> p[0] - q[0]); // 按照左端点从小到大排序
        List<int[]> ans = new ArrayList<>();
        for (int[] p : intervals) {
            int m = ans.size();
            if (m > 0 && p[0] <= ans.get(m - 1)[1]) { // 可以合并
                ans.get(m - 1)[1] = Math.max(ans.get(m - 1)[1], p[1]); // 更新右端点最大值
            } else { // 不相交, 无法合并
                ans.add(p); // 新的合并区间
            }
        }
        return ans.toArray(new int[ans.size()][]);
    }
}
56. 合并区间
https://blog.hzau.top/posts/algorithm/56-merge-intervals/
作者
Dawn Journey
发布于
2025-04-24
许可协议
CC BY-NC-SA 4.0