Leetcode JAVA刷刷站(57)插入区间

一、题目概述

二、思路方向

为了解决这个问题,我们可以遍历给定的区间列表 intervals,并同时构建一个新的列表来存储最终的合并结果。遍历过程中,我们检查当前区间是否与 newInterval 重叠或相邻,并根据需要进行合并。如果不重叠,则直接将当前区间添加到结果列表中。

三、代码实现

java 复制代码
import java.util.ArrayList;  
import java.util.List;  
  
public class Solution {  
    public int[][] insert(int[][] intervals, int[] newInterval) {  
        List<int[]> merged = new ArrayList<>();  
        int i = 0;  
        int n = intervals.length;  
  
        // 添加所有不与 newInterval 重叠的区间到 merged  
        while (i < n && intervals[i][1] < newInterval[0]) {  
            merged.add(intervals[i]);  
            i++;  
        }  
  
        // 合并重叠的区间  
        while (i < n && intervals[i][0] <= newInterval[1]) {  
            newInterval[0] = Math.min(newInterval[0], intervals[i][0]);  
            newInterval[1] = Math.max(newInterval[1], intervals[i][1]);  
            i++;  
        }  
  
        // 添加合并后的 newInterval  
        merged.add(newInterval);  
  
        // 添加剩余的不重叠区间  
        while (i < n) {  
            merged.add(intervals[i]);  
            i++;  
        }  
  
        // 将 List 转换为二维数组  
        int[][] result = new int[merged.size()][2];  
        for (i = 0; i < merged.size(); i++) {  
            result[i] = merged.get(i);  
        }  
  
        return result;  
    }  
  
    public static void main(String[] args) {  
        Solution solution = new Solution();  
        int[][] intervals = {{1, 3}, {6, 9}};  
        int[] newInterval = {2, 5};  
        int[][] mergedIntervals = solution.insert(intervals, newInterval);  
  
        // 打印合并后的区间  
        for (int[] interval : mergedIntervals) {  
            System.out.println(java.util.Arrays.toString(interval));  
        }  
    }  
}

执行结果:

四、小结

这段代码首先遍历 intervals 列表,将所有与 newInterval 不重叠的区间添加到 merged 列表中。然后,它继续遍历 intervals 列表,将所有与 newInterval 重叠或相邻的区间与 newInterval 合并,更新 newInterval 的起始和结束位置。之后,将合并后的 newInterval 添加到 merged 列表中,并继续将剩余的区间添加到 merged 列表中。最后,将 merged 列表转换为二维数组并返回。

在示例的 main 方法中,我们测试了给定的示例输入,并打印了合并后的区间列表。

结语

星光不问赶路人

时光不负有心人

!!!

相关推荐
JAVA面经实录9174 分钟前
完整版JVM 深度学习体系(二)
java·jvm
.ZGR.6 分钟前
线程池相关知识及并发统计案例实现
java·开发语言
拉拉拉拉拉拉拉马6 分钟前
Windsurf 最新版进阶讲解:从 Cascade 到 Devin Local,重新理解 AI 编程工作流
人工智能·算法
Mr_pyx8 分钟前
面试题记录
jvm·数据结构·算法·spring·mybatis
zzzsde9 分钟前
【Linux】线程同步和互斥(1):线程互斥与加锁实现
linux·运维·服务器·开发语言·算法
努力努力再努力wz17 分钟前
【C++高阶数据结构系列】:时间轮定时器详解:原理分析与代码实现,带你从零手撕时间轮!(附时间轮的实现源码)
c语言·开发语言·数据结构·c++·qt·算法·ui
慕言手记20 分钟前
IDEA 插件常用-2026版
java·ide·spring boot·intellij-idea·idea·intellij idea
颖火虫盟主22 分钟前
Hello World MCP Server 实现总结
java·前端·python
mmz120740 分钟前
广搜题目练习(c++)
c++·算法
iiiiyu40 分钟前
⾯向对象和集合编程题
java·大数据·开发语言·数据结构·编程语言