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 方法中,我们测试了给定的示例输入,并打印了合并后的区间列表。

结语

星光不问赶路人

时光不负有心人

!!!

相关推荐
sheeta199817 分钟前
LeetCode 补拙笔记 日期:2026.06.07 题目:1. 两数之和
笔记·算法·leetcode
后青春期的诗go17 分钟前
泛微OA-E9与第三方系统集成开发企业级实战记录(十五)
java·泛微·集成开发·e9
吃口巧乐兹1 小时前
理解 Agent 中的 Slash Command:从概念到自定义命令实践
java·github
柒和远方1 小时前
LeetCode 452. 用最少数量的箭引爆气球 —— 区间贪心经典:排序 + 扫描一箭穿心
javascript·python·算法
夕除2 小时前
shizhan--10
java·开发语言
Zhang~Ling2 小时前
C++ 红黑树封装:myset和mymap的底层实现
开发语言·数据结构·c++·算法
ECT-OS-JiuHuaShan2 小时前
什么是对和错?——“有针对性定义域的逻辑值的真伪”:认识论终极追问的公理化裁决
数据库·人工智能·算法·机器学习·数学建模
吴声子夜歌2 小时前
JVM——并发容器实现原理
java·jvm·并发容器
xier_ran2 小时前
【infra之路】PagedAttention
java·开发语言
Merlyn103 小时前
【栈】155. 最小栈
python·算法