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

结语

星光不问赶路人

时光不负有心人

!!!

相关推荐
Miraitowa_cheems5 小时前
LeetCode算法日记 - Day 64: 岛屿的最大面积、被围绕的区域
java·算法·leetcode·决策树·职场和发展·深度优先·推荐算法
Christo35 小时前
关于K-means和FCM的凸性问题讨论
人工智能·算法·机器学习·数据挖掘·kmeans
Lisonseekpan5 小时前
Spring Boot 中使用 Caffeine 缓存详解与案例
java·spring boot·后端·spring·缓存
为java加瓦5 小时前
Rust 的类型自动解引用:隐藏在人体工学设计中的魔法
java·服务器·rust
SimonKing5 小时前
分布式日志排查太头疼?TLog 让你一眼看穿请求链路!
java·后端·程序员
消失的旧时光-19436 小时前
Kotlin 判空写法对比与最佳实践
android·java·kotlin
_不会dp不改名_6 小时前
leetcode_1382 将二叉搜索树变平衡树
算法·leetcode·职场和发展
小许学java6 小时前
Spring AI快速入门以及项目的创建
java·开发语言·人工智能·后端·spring·ai编程·spring ai
一叶飘零_sweeeet6 小时前
从 “死锁“ 到 “解耦“:重构中间服务破解 Java 循环依赖难题
java·循环依赖
greentea_20136 小时前
Codeforces Round 173 B. Digits(2043)
c++·算法