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,32,6 重叠, 将它们合并为 1,6.

示例 2:

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

输出:\[1,5]

解释:区间 1,44,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()][]);
    }
相关推荐
吃饱了得干活2 小时前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
lwx572804 小时前
探秘InnoDB:搞懂它的内存、线程、磁盘与日志刷盘策略
java·后端
Flynt5 小时前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
plainGeekDev6 小时前
Activity 间传值 → Navigation 参数
android·java·kotlin
plainGeekDev6 小时前
onActivityResult → ActivityResult API
android·java·kotlin
Sunia6 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi7 小时前
J7A-高级Java工程师面试三道灵魂拷问-深度广度与工程素养的终极检验
java·后端
_清歌10 小时前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局10 小时前
SVD 的三步走:双对角化、Givens 收敛、排序
算法