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

结语

星光不问赶路人

时光不负有心人

!!!

相关推荐
Yingye Zhu(HPXXZYY)1 小时前
ICPC 2023 Nanjing R L 题 Elevator
算法
坐吃山猪2 小时前
SpringBoot01-配置文件
java·开发语言
我叫汪枫3 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
阿维的博客日记3 小时前
LeetCode 139. 单词拆分 - 动态规划解法详解
leetcode·动态规划·代理模式
yaoxtao3 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
程序员Xu4 小时前
【LeetCode热题100道笔记】二叉树的右视图
笔记·算法·leetcode
Swift社区4 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
笑脸惹桃花4 小时前
50系显卡训练深度学习YOLO等算法报错的解决方法
深度学习·算法·yolo·torch·cuda
阿维的博客日记5 小时前
LeetCode 48 - 旋转图像算法详解(全网最优雅的Java算法
算法·leetcode
GEO_YScsn5 小时前
Rust 的生命周期与借用检查:安全性深度保障的基石
网络·算法