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

结语

星光不问赶路人

时光不负有心人

!!!

相关推荐
木井巳2 小时前
【多线程】并发安全
java·java-ee
源代码•宸8 小时前
分布式缓存-GO(分布式算法之一致性哈希、缓存对外服务化)
开发语言·经验分享·分布式·后端·算法·缓存·golang
It's now8 小时前
Spring AI 基础开发流程
java·人工智能·后端·spring
cxh_陈8 小时前
线程的状态,以及和锁有什么关系
java·线程·线程的状态·线程和锁
计算机毕设VX:Fegn08958 小时前
计算机毕业设计|基于springboot + vue图书商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
R.lin8 小时前
Java 8日期时间API完全指南
java·开发语言·python
毕设源码-赖学姐8 小时前
【开题答辩全过程】以 高校教学质量监控平台为例,包含答辩的问题和答案
java·eclipse
yongui478348 小时前
MATLAB的指纹识别系统实现
算法
高山上有一只小老虎8 小时前
翻之矩阵中的行
java·算法
jghhh018 小时前
RINEX文件进行卫星导航解算
算法