57. 插入区间

题目:

给出一个无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

 

示例 1:

输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]

示例 2:

[[1,2],[3,5],[6,7],[8,10],[12,16]]
[4,8]
[4,8]
[3,5],[6,7],[8,10]
复制代码
 1 class Solution {
 2     public int[][] insert(int[][] intervals, int[] newInterval) {
 3         //特殊情况特殊处理
 4        if(intervals.length==0){
 5            int[][] res={{newInterval[0],newInterval[1]}};
 6            return res;}
 7        
 8        //新建一个数组把原来两个合并在一起
 9        int[][] temp_array=new int[intervals.length+1][intervals[0].length];
10        for(int i=0;i<intervals.length;i++){
11            temp_array[i][0]=intervals[i][0];
12            temp_array[i][1]=intervals[i][1];
13        }
14        temp_array[intervals.length][0]=newInterval[0];
15        temp_array[intervals.length][1]=newInterval[1];
16 
17         //对新数组排序
18         Arrays.sort(temp_array,new Comparator<int[]>(){
19         public int compare(int[] array1,int[] array2){
20           return array1[0]-array2[0];
21         }});
22         //核心代码
23         List<int[]> list=new ArrayList<int[]>();
24         for(int i=0;i<temp_array.length;++i){
25            if(list.size()==0||list.get(list.size()-1)[1]<temp_array[i][0]){
26                list.add(new int[]{temp_array[i][0],temp_array[i][1]});
27            } else{
28                list.get(list.size()-1)[1]=Math.max(temp_array[i][1],list.get(list.size()-1)[1]);
29            }
30         }
31         return list.toArray(new int[list.size()][]);
32     }
33 }
复制代码

 

 

 

 
posted @   堤苏白  阅读(71)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示