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

力扣热题100:合并区间详解(Java实现)(56)

题目描述

解题思路

核心思想:排序 + 贪心合并
  1. 排序预处理 先按区间左端点升序排序,使重叠的区间相邻。这是合并操作的基础,确保只需一次遍历即可完成合并。

    • 排序后,重叠区间必然连续分布(如 [1,3] 和 [2,6] 相邻)。
  2. 贪心合并 遍历排序后的区间列表,动态维护当前合并区间的右边界:

    • 若当前区间左端点 ≤ 上一区间的右端点 → 合并(更新右边界为两者最大值);
    • 否则 → 将上一区间加入结果,开启新区间
    •  贪心策略:每次合并时取最大右边界,确保覆盖最广 

代码详解(逐行分析)

class Solution {public int[][] merge(int[][] intervals) {// Step 1: 按左端点升序排序Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] o1, int[] o2) {return o1[0] - o2[0]; // 比较左端点}});// Step 2: 动态合并重叠区间List<int[]> result = new ArrayList<>();for (int i = 0; i < intervals.length; i++) {int left = intervals[i][0];int right = intervals[i][1];// 情况1:结果集为空 或 当前区间与上一区间不重叠 → 直接添加if (result.size() == 0 || result.get(result.size() - 1)[1] < left) {result.add(new int[]{left, right});} // 情况2:当前区间与上一区间重叠 → 合并(更新右边界)else {result.get(result.size()-1)[1]=Math.max(right, result.get(result.size()-1)[1]);}}// Step 3: 转换List为二维数组return result.toArray(new int[result.size()][]);}
}

关键逻辑解析
  1. 排序函数 Arrays.sort 中使用自定义比较器,确保按区间左端点(o1)升序排列 。
  2. 合并条件
    • result.size() == 0:结果集为空时,直接添加第一个区间;
    • last [1](@ref) < left:当前区间左端点大于上一区间的右端点 → 无重叠;
    • 否则更新上一区间的右边界为 max(last [1](@ref), right) 。
  3. 结果转换 result.toArray() 将 ArrayList 转为二维数组,满足返回值类型要求。

复杂度分析

  • 时间复杂度:O(nlog⁡n)O(nlogn) 排序占主导(O(nlog⁡n)O(nlogn)),遍历仅需 O(n)O(n) 。
  • 空间复杂度:O(n)O(n) 存储结果需额外空间(最坏情况下无重叠,需存所有区间) 。

总结与拓展

  1. 为什么贪心策略有效? 排序后,局部最优(每次合并取最大右边界)可推导出全局最优解 。
  2. 边界处理技巧
    • 输入空数组时,result.size()==0 确保安全 ;
    • 区间端点相等(如 [1,4] 和 [4,5])视为重叠 。
http://www.dtcms.com/a/359750.html

相关文章:

  • 历史数据分析——寒武纪
  • Android开发-活动页面
  • 20.28 《4bit量化模型预处理揭秘:如何节省75%显存高效微调LLM?》
  • leetcode-hot-100(堆)
  • 金融学-货币理论
  • Kafka应用过程中的高频问题
  • 【Linux基础】深入理解计算机存储:GPT分区表详解
  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:BC136 KiKi判断上三角矩阵及BC139 矩阵交换题目的解析
  • uvm验证环境中struct(结构体)和class的区别与联系
  • 使用AdaLoRA 自适应权重矩阵微调大模型介绍篇
  • 接口测试总结-含接口测试和前端测试的区别与比较
  • PyTorch 张量(Tensor)详解:从基础到实战
  • 1.9 初始Memory Profiler Package
  • 面试 八股文 经典题目 - HTTPS部分(一)
  • Qt组件布局的经验
  • 深度学习数据加载实战:从 PyTorch Dataset 到食品图像分类全流程解析
  • 实现需求精准预测、运输路径优化及库存高效管理的智慧物流开源了
  • 利用 Java 爬虫获取淘宝拍立淘 API 接口数据的实战指南
  • 图片格式转换v2_tif转png tif转jpg png转tif
  • mysql深度分页
  • JVM的四大组件是什么?
  • 【贪心算法】day5
  • 暄桐林曦老师关于静坐常见问题的QA
  • 矩阵待办ios app Tech Support
  • 好用的电脑软件、工具推荐和记录
  • Labview使用modbus或S7与PLC通信
  • 微服务01
  • Java与分布式系统的集成与实现:从基础到应用!
  • 从 JDK 8 到 JDK 17
  • 【Python语法基础学习笔记】函数定义与使用