57. 插入区间
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
class Solution {
/*
1.给你一个 无重叠的,按照区间起始端点排序的区间列表。
2.在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)*/
public int[][] insert(int[][] intervals, int[] newInterval) {
int left = newInterval[0];
int right = newInterval[1];
boolean loop = false;
ArrayList<int []> list = new ArrayList<>();
for(int [] interval :intervals) {
if(interval[1] < left) {
//当要插入的区间的范围在左侧,并且不无交集时
list.add(interval);
}else if(interval[0] > right) {
if (!loop) {//当需要插入的区间在右侧且无交集
list.add(new int[]{left, right});
loop = true;
}
list.add(interval);
}else {//要插入的区间在列表之间时
left = Math.min(left, interval[0]);
right = Math.max(right,interval[1]);
}
}
if(!loop) {
list.add(new int [] {left, right});//
}
int [][] ans = new int [list.size()][2];
for (int i = 0; i < list.size(); ++i) {//遍历列表结果
ans[i] = list.get(i);
}
return ans;
}
}