博客
关于我
leetcode题解56-合并区间
阅读量:791 次
发布时间:2023-01-31

本文共 1792 字,大约阅读时间需要 5 分钟。

要解决这一问题,我们需要合并所有重叠的区间,返回一个不重叠的区间数组。以下是详细的实现思路:

实现步骤

  • 输入验证:首先检查输入的区间数是否为0或1。如果是,直接返回输入数组。
  • 排序区间数组:将区间数组按左端点进行升序排序。这样有助于后续处理相邻的区间,判断是否有重叠。
  • 初始化结果集合:使用动态数组(ArrayList)来存储合并后的结果。
  • 遍历区间数组
    • 初始化当前区间为第一个区间。
    • 对每个后续的区间,检查它是否与当前区间重叠。
    • 如果重叠,则更新当前区间的右端点为两个区间右端点的最大值。
    • 如果不重叠,则将当前区间添加到结果中,并将当前区间设为下一个区间。
  • 添加最后一个区间:循环结束后,确保将最后一个区间添加到结果中。
  • 转换为二维数组结果:将动态数组中的结果转换为二维数组返回。
  • 具体实现代码

    import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util.List;public class Solution {    public int[][] merge(int[][] intervals) {        if (intervals.length == 0 || intervals.length == 1) {            return intervals;        }        // 对区间的左端点进行排序        Arrays.sort(intervals, new Comparator
    () { public int compare(int[] o1, int[] o2) { return o1[0] - o2[0]; } }); // 使用动态数组保存结果 List
    lists = new ArrayList<>(); int start = intervals[0][0]; int end = intervals[0][1]; for (int i = 1; i < intervals.length; i++) { int[] current = intervals[i]; if (current[0] > end) { // 没有重叠,将当前区间加入结果 lists.add(new int[]{start, end}); start = current[0]; end = current[1]; } else { // 有重叠,更新当前区间的右端点 end = Math.max(end, current[1]); } } // 将最后一个区间加入结果 lists.add(new int[]{start, end}); int[][] res = new int[lists.size()][]; for (int i = 0; i < lists.size(); i++) { res[i] = lists.get(i); } return res; }}

    代码解释

    • 排序与比较:使用自定义的比较器对区间数组排序,确保区间按照左端点升序排列。
    • 动态数组处理结果:使用ArrayList来存储结果,这样可以灵活地动态增加或修改元素。
    • 合并逻辑:遍历每个区间,检查当前区间是否与下一个区间重叠,重叠则合并,否则添加当前区间到结果。
    • 最后处理:循环结束后,添加最后一个当前区间到结果中,以确保不遗漏。

    这个方法高效且清晰,能够正确地合并所有重叠的区间,并返回一个不重叠的区间数组。

    转载地址:http://aegyk.baihongyu.com/

    你可能感兴趣的文章
    Kubernetes实战(二十九)-集群资源管理(CPU & Memory)
    查看>>
    Kubernetes实战(二十二)-Etcd 集群部署(安全)
    查看>>
    Kubernetes实战(二十五)-Flannel 网络部署(不推荐,不支持 Etcd3)
    查看>>
    Kubernetes实战(二十八)-环境共享与隔离(Namespace)
    查看>>
    Kubernetes实战(十五)-敏感数据管理(Secret)
    查看>>
    Kubernetes对象Service详解
    查看>>
    kubernetes常用工具
    查看>>
    Kubernetes快速上手:部署、使用及核心概念解析
    查看>>
    Kubernetes故障排查与面试汇总
    查看>>
    Kubernetes故障排查实战
    查看>>
    kubernetes的概念介绍_服务发现负载均衡_存储编排_自动部署和回滚_自动完成装箱计算_自我修复_集群的方式_架构原理---分布式云原生部署架构搭建013
    查看>>
    Kubernetes网络插件使用详解
    查看>>
    Kubernetes部署Dashboard实战
    查看>>
    Kubernetes集群升级实战
    查看>>
    KubeSphere核心实战_kubesphere部署redis02_创建redis现指定存储卷_配置外网访问服务---分布式云原生部署架构搭建048
    查看>>
    KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图
    查看>>
    Lambda 表达式(使用前提、“类型推断”、作用、优缺点、Lambda还能省略的情况)【java8新特性------Lambda 表达式】
    查看>>
    lambda表达式与匿名内部类与双冒号(::)
    查看>>
    lamp 一键安装
    查看>>
    laradock 安装使用 kafka
    查看>>