LeetCode:56.合并区间

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:56.合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervalsi = starti, endi 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = \[1,3,2,6,8,10,15,18]

输出:\[1,6,8,10,15,18]

解释:区间 1,3 和 2,6 重叠, 将它们合并为 1,6.

示例 2:

输入:intervals = \[1,4,4,5]

输出:\[1,5]

解释:区间 1,4 和 4,5 可被视为重叠区间。

  • 类似前面的弓箭射气球问题,这里需要注意左边界是res里面最后一个元素的左边界
  • 重叠的时候需要删除res里面上一个元素,再重新插入新元素
java 复制代码
	public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
        LinkedList<int[]> res = new LinkedList<>();
        res.add(intervals[0]);
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] <= intervals[i - 1][1]) {
                intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]);
                // 注意,这里新数组的start不是 i-1的左边界,而是res中最后一个元素的左边界
                int start = res.getLast()[0];
                int end = intervals[i][1];
                // 注意这里需要移除res中最后一个的元素 然后才能插入新元素
                res.removeLast();
                res.add(new int[] { start, end });
            } else {
                res.add(intervals[i]);
            }
        }
        return res.toArray(new int[res.size()][]);
    }
相关推荐
维克兜率天1 分钟前
【维克】统计套利:寻找市场的“定价误差“
人工智能·python·算法
秋饼8 分钟前
Claude Haiku 5.5 + Spring AI 2.0 企业级低成本高并发 AI Agent 实战:子智能体分工、成本熔断与百万上下文落地
java·ai·技术分享·后端开发
aqiu11111112 分钟前
【C++算法打怪专栏】LeetCode 1. 两数之和(哈希表解法总结)
c++·算法·leetcode
楚识科技21 分钟前
票据 OCR 识别技术深度解析:从算法原理到企业级落地实现
算法·ocr
longlongzihan22 分钟前
LeetCode 25. K 个一组翻转链表 (迭代+分组反转法)
算法·leetcode·链表
xuxigifxfh23 分钟前
牛客:BISHI8 大整数哈希
java·算法·哈希算法
涉密IT资质笔记26 分钟前
涉密资质投入产出分析模型:时间成本、四块成本构成与 ROI 决策框架
java·开发语言·算法
木井巳28 分钟前
【BFS 解决拓扑排序】火星词典
java·算法·leetcode·广度优先·宽度优先·图搜索算法
霸道流氓气质29 分钟前
Java调用StableDiffusion/ComfyUI图像生成:DAG工作流编排、WebSocket实时进度与Flux模型集成的生产级实战
java·websocket·stable diffusion
北风toto39 分钟前
KMP 算法详解:从暴力匹配到 O(n+m) 的字符串搜索
java·开发语言·算法