题意:
代码:
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
//已经排序
ArrayList<int[]> res=new ArrayList<>();
int len=intervals.length;
int num1=newInterval[0];
int num2=newInterval[1];
int local=0; //定位 内部数组
while(local<len && intervals[local][1]<num1){
res.add(new int[] {intervals[local][0],intervals[local][1]});
++local;
}
while(local<len && intervals[local][0]<=num2){
//处理交叉数组 即找出最大值 和最小值
newInterval[0]=Math.min(intervals[local][0],newInterval[0]);
newInterval[1]=Math.max(intervals[local][1],newInterval[1]);
++local;
}
res.add(new int[] {newInterval[0],newInterval[1]});
while(local<len){
res.add(new int[] {intervals[local][0],intervals[local][1]});
local++;
}
return res.toArray(new int[res.size()][2]);
//处理尾巴数组
/*if(num2<=intervals[0][0]){
//直接加入返回
}
if(num1>=intervals[len-1][1]){
//直接加入返回
}*/
/*for(int i=0;i<len;i++){
if(num1<=intervals[i][1]){
//new的首位数字 在某一组数的中间 那么 可以进行合并操作
}
}*/
}
}
思路:
先找到插入的位置
然后在插入值的最大值 和被插位置的最小值 之间取极值保存
最后保存剩下的
依旧是 数组返回形式
集合
list.add(new int[] {插入的元素 这样作为一个一维数组得以保存})
返回时 要求数组形式
list.toArray(new int[行][列]);
toArray();括号内部是数组大小