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

2025年- G26-Lc100-57.插入间隔(max、min)--java版

1.题目描述

在这里插入图片描述

题目翻译:

给定一个不重叠的区间阵列 intervals,其中intervals[i] = [starti, endi]表示第i一个区间的起始位置和结束位置,并且intervals 按照起始位置starti升序排序。

另外,给定一个新的区间newInterval = [start, end],表示另一个区间的起始位置和结束位置。

提交newInterval到插入intervals中,要求:

仍然intervals保持starti升序排序。

仍然保持intervals重叠不重叠(如果有重叠区间,则进行合并)。

返回创建newInterval后intervals。

2.思路

思路一:
在这里插入图片描述

思路2:

在这里插入图片描述

思路3:

在这里插入图片描述

在这里插入图片描述
思路4:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
思路5:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
总结: intervals[i][0] <= newInterval[1],那么 intervals[i] 的开始位置在 newInterval 的结束位置之前,说明 intervals[i] 的区间有可能和 newInterval 重叠。

例如,newInterval = [2, 5],intervals[i] = [4, 7],这时 intervals[i][0] = 4,newInterval[1] = 5,满足 4 <= 5,说明它们有重叠。
重叠的定义:

两个区间 [a, b] 和 [c, d] 重叠,当且仅当 a <= d 且 c <= b。

在这个问题中,通过 intervals[i][0] <= newInterval[1] 来确保 intervals[i] 和 newInterval 存在潜在重叠的情况(即左边的区间开始在右边的区间结束之前)。
如果当前区间 [a, b] 和新区间 [c, d] 发生重叠,我们的目标是要让区间 [a, b] 和 [c, d] 合并成一个新的区间。因为只要 a <= d,就可以肯定这两个区间有重叠,而 c <= b 则在合并时通过更新区间的开始和结束位置来自然满足。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.代码实现

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {

        List<int[]> L1=new ArrayList<>();

        int i=0,n=intervals.length-1;

         // 1. 先加入所有不重叠的、在 newInterval 之前的区间
        while(i<=n&& intervals[i][1]<newInterval[0])
        {
                L1.add(intervals[i]);//result.add(intervals[i]); 的作用是将整个 区间 [start, end] 加入 result,而不是单独加入 intervals[i][1](即区间的 end 值)。
                i++;
        }

        while(i<=n&&intervals[i][0]<=newInterval[1])
        {
            //更新区间的值
             // 2. 合并所有与 newInterval 有重叠的区间,新区间是在动态扩展,然后Interval是原始提供的数组
             newInterval[0]=Math.min(intervals[i][0],newInterval[0]);
             newInterval[1]=Math.max(intervals[i][1],newInterval[1]);
             i++;
        }
        // 加入合并后的区间
        L1.add(newInterval);

        while(i<=n)
        {
         // 3. 加入所有不重叠的、在 newInterval 之后的区间
         L1.add(intervals[i]);
         i++;
        }

        // 4. 转换为二维数组返回,行数确定,列数可以扩展
       // return L1.toArray(new int[L1.size()][]);
         return L1.toArray(new int[L1.size()][2]);




        
    }
}

另一种写法

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {

        List<int[]> L1=new ArrayList<>();

        int i=0,n=intervals.length-1;

         // 1. 先加入所有不重叠的、在 newInterval 之前的区间
        while(i<=n&& intervals[i][1]<newInterval[0])
        {
                L1.add(intervals[i]);//result.add(intervals[i]); 的作用是将整个 区间 [start, end] 加入 result,而不是单独加入 intervals[i][1](即区间的 end 值)。
                i++;
        }

        while(i<=n&&intervals[i][0]<=newInterval[1])
        {
            //更新区间的值
             // 2. 合并所有与 newInterval 有重叠的区间,新区间是在动态扩展,然后Interval是原始提供的数组
             newInterval[0]=Math.min(intervals[i][0],newInterval[0]);
             newInterval[1]=Math.max(intervals[i][1],newInterval[1]);
             i++;
        }
        // 加入合并后的区间
        L1.add(newInterval);

        while(i<=n)
        {
         // 3. 加入所有不重叠的、在 newInterval 之后的区间
         L1.add(intervals[i]);
         i++;
        }

        // 4. 转换为二维数组返回,行数确定,列数可以扩展
        //return L1.toArray(new int[L1.size()][2]);
        //return L1.toArray(new int[L1.size()][]);

        int res[][]=new int[L1.size()][2];
        for(int j=0;j<L1.size();j++)
        {
            res[j]=L1.get(j);
        }
        return res;
        
    }
}

相关文章:

  • pyside6的QGraphicsView体系,当鼠标位于不同的物体,显示不同的右键菜单
  • 【自学笔记】Spark基础知识点总览-持续更新
  • 解决PowerShell下Git中文乱码问题
  • vmwaretools解压失败|vmware tools distrib cannot mkdir read only file system|bug汇总
  • OpenResty(Lua)+Redis实现动态封禁IP
  • 朴素贝叶斯:文本处理中的分类利器
  • 3. 轴指令(omron 机器自动化控制器)——>MC_ResetFollowingError
  • 计算机网络的分类——按照按拓扑结构分类
  • django定时任务方案比对
  • PCL—voxel点云网格化
  • 软件功能性测试工具有哪些?专业软件测试服务推荐
  • 深入解析嵌入式内核:从架构到实践
  • 2025红明谷writeup
  • 【零基础学python】python基础语法(二)
  • UE4学习笔记 FPS游戏制作15修正可以换枪中可以继续换枪和开火的Bug
  • 大数据Trino面试题及参考答案
  • SQL Server行转列操作及PIVOT运算符
  • react 大屏根据屏幕分辨率缩放
  • Qt 重入和线程安全
  • 【线程安全问题的原因和方法】【java形式】【图片详解】
  • 一季度全国30强城市出炉:谁能更进一步?谁掉队了?
  • 夹缝中的责编看行业:长视频之殇,漫长周期
  • 越老越妖的库里,成了火箭季后赛里一晃十年的噩梦
  • 这样喝酸奶相当于在喝糖水,会导致娃龋齿、肥胖
  • “五一”假期第四天,全社会跨区域人员流动量预计超2.7亿人次
  • 大众、学术和政治三重框架下的“汉末之变”