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

十四 56. 合并区间

56. 合并区间https://leetcode.cn/problems/merge-intervals/

以数组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] 可被视为重叠区间。

示例 3:

输入:intervals = [[4,7],[1,4]]输出:[[1,7]]解释:区间 [1,4] 和 [4,7] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104
class Solution { public int[][] merge(int[][] intervals) { // 特殊情况处理 if(intervals == null || intervals.length <= 1){ return intervals; } // 1. 按区间开始位置排序(如果开始相同,按结束排) Arrays.sort(intervals, (a, b) -> { if(a != b){ return a[0] - b[0];// 按开始位置升序 } return a[1] - b[1];// 开始相同,按结束位置升序 }); // 2. 使用List存储结果(不知道最终有几个区间) List<int[]> result = new ArrayList<>(); // 3. 初始化当前区间为第一个 int curStart = intervals[0][0]; int curEnd = intervals[0][1]; // 4. 从第二个开始遍历 for(int i = 1; i < intervals.length; i++){ int start = intervals[i][0]; int end = intervals[i][1]; if(curEnd >= start){ // 重叠:扩展当前区间 curEnd = Math.max(curEnd, end); // 取较大的结束位置 }else{ // 不重叠:保存当前区间,开启新区间 result.add(new int[]{curStart, curEnd}); curStart = start; curEnd = end; } } // 5. 别忘了最后一个区间! result.add(new int[]{curStart, curEnd}); // 6. List转数组返回 return result.toArray(new int[result.size()][]); } }

Lambda 表达式语法拆解

Arrays.sort(intervals, (a, b) -> { ... }); // ↑ ↑ // 待排序数组 Lambda表达式

2.1 为什么能这么写?

Arrays.sort()有两个重载版本:

// 版本1:只传数组,按自然顺序排(基本类型升序) public static void sort(int[] a) // 版本2:传数组 + 比较器,自定义排序规则 public static <T> void sort(T[] a, Comparator<? super T> c) // ↑ // 这里需要 Comparator 对象

Comparator是一个函数式接口(只有一个抽象方法):

@FunctionalInterface public interface Comparator<T> { int compare(T o1, T o2); // 只有一个抽象方法 // ... 其他是 default/static 方法 }

Lambda 的本质:因为Comparator只有一个抽象方法,编译器能自动推断(a, b) -> {...}就是在实现compare方法。

逐行解释代码逻辑

Arrays.sort(intervals, (a, b) -> { // a, b 代表两个要比较的区间(int[]类型) // 第一关键字:按区间开始位置排序 if (a[0] != b[0]) { return a[0] - b[0]; // 升序:小的在前 } // 第二关键字:开始位置相同,按结束位置排序 return a[1] - b[1]; // 升序:小的在前 });
http://www.jsqmd.com/news/564271/

相关文章:

  • Stable-Diffusion-V1-5 社区资源导航:从模型下载到灵感获取的全链路
  • 2026年市面上靠谱的耐磨弯头直销厂家电话,钢套钢保温钢管/保温管托/人孔/弹簧支座/聚氨酯保温管,耐磨弯头品牌口碑分析 - 品牌推荐师
  • LangFlow效果展示:5个用拖拽方式搭建的实用AI应用案例
  • 高效开源输入法词库转换实战指南:30+格式无缝互转技巧
  • 重构游戏叙事创作:Arrow工具如何革新互动故事开发流程
  • 新能源车续航焦虑?聊聊AUTOSAR网络管理如何帮你‘省电’的底层逻辑
  • DeepSeek-OCR-2功能体验:倾斜扫描件自动矫正实测
  • 软件测试|银行相关业务讲解常见问题
  • 深刻理解“程序 = 算法 + 数据结构”
  • 2026中国木门十大品牌排行榜:品质与设计的优选指南 - 品牌排行榜
  • 图图的嗨丝造相-Z-Image-Turbo效果对比:8bit vs 16bit精度推理对渔网袜边缘锐度的影响
  • 6大模块解决研究者的Zotero Citation插件应用难题
  • AWPortrait-Z开源可部署实践:国产昇腾/寒武纪芯片适配可行性初步验证
  • 【技术标准】SHA-256 算法在 LIMS 原始记录存证中的落地实践:LabsCare 的数据完整性闭环逻辑
  • 2026昆山离婚财产分割口碑好的律师选择指南 - 品牌排行榜
  • 深度解析HarmonyOS原生应用开发:从架构设计到性能优化
  • 2026高强线加捻设备厂家推荐指南:涤纶纱加捻机厂家+高强线加捻机厂家+热定型倍捻机厂家推荐全解析 - 栗子测评
  • 手把手玩转混动仿真:Matlab/Simulink并联P2模型实战指南
  • Python爬虫实战:手把手教你如何构建 Figshare 全量科研资源集合索引与元数据挖掘引擎!
  • 霜儿-汉服-造相Z-Turbo模型推理优化:理解与避免神经网络中的耦合过度
  • 电话号码智能定位:开源工具实现快速地理信息查询的创新方案
  • 影墨·今颜GPU显存优化实践:梯度检查点+Flash Attention-2集成方案
  • 2026年热门的不锈钢岗亭/收费岗亭/执勤岗亭/移动岗亭公司口碑推荐 - 行业平台推荐
  • “程序 = 算法 + 数据结构”的拓展与启示
  • 2026河南工业展口碑推荐:精选展览一览无余,自动化/装备/环保/压力机/仪器仪表/激光技术设备,工业展展览推荐分析 - 品牌推荐师
  • 2026昆山靠谱的婚姻家庭律师咨询服务参考 - 品牌排行榜
  • 千问3.5-2B企业私有化部署:内网环境隔离运行,保障图片数据不出域
  • Bypass Paywalls Clean:突破内容壁垒的终极解决方案
  • 2026年质量好的瓷砖翻新腻子/灌浆料腻子/真石漆专用腻子/瓷砖粘合剂腻子实力品牌厂家推荐 - 行业平台推荐
  • OFA视觉问答模型惊艳效果:复杂背景中主物体识别与属性描述能力