当前位置: 首页 > article >正文

LeetCode:56.合并区间

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

LeetCode:56.合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [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里面上一个元素,再重新插入新元素
	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()][]);
    }

http://www.kler.cn/a/525492.html

相关文章:

  • 不背单词快捷键(不背单词键盘快捷键)
  • 【Julia】Julia预编译与外部库:从崩溃到完美集成
  • [C语言日寄] <stdio.h> 头文件功能介绍
  • Haproxy入门学习二
  • Ubuntu二进制部署K8S 1.29.2
  • RocketMQ原理—5.高可用+高并发+高性能架构
  • 工业相机常用词语解释
  • Vue.js 使用 Vuex 管理组件间的共享状态
  • 【GStreamer】GstBuffer的简单分析
  • 10.7 获得程序版本信息
  • 【DeepSeek】LLM强化学习GRPO Trainer详解
  • Baklib在知识管理效率提升中的独特价值与其他产品的比较探析
  • RocketMQ 中如何实现消息的可靠传递?
  • C++,STL 简介:历史、组成、优势
  • 9.1 LangChain深度解析:大模型应用开发的“万能胶水”与核心架构设计
  • 数论问题77一一3x+1问题
  • 【deepseek实战】绿色好用,不断网
  • UE5制作视差图
  • 热更新杂乱记
  • Android车机DIY开发之学习篇(七)NDK交叉工具构建
  • 数据结构---哈希表
  • Linux - 常用的I/O 多路复用技术 select, poll, epoll
  • PyTorch 与 Python 版本对应关系
  • hive:基本数据类型,关于表和列语法
  • Unity敌人逻辑笔记
  • 推动知识共享的在线知识库实施与优化指南