Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]
Example 2:
Input: intervals =[[1,2],[3,5],[6,7],[8,10],[12,16]]
, newInterval =[4,8]
Output: [[1,2],[3,10],[12,16]] Explanation: Because the new interval[4,8]
overlaps with[3,5],[6,7],[8,10]
.
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
与56题类似 不过这里是在原来基础上新加一个int[]
方法一:对原先数组先排序,然后在原来基础上找出合并的 位置 判断合并依次合并出结果,最后对生成的list进行排序
public int[][] insert(int[][] intervals, int[] newInterval) {
if(newInterval == null || newInterval.length==0) {
return intervals;
}
if(intervals == null) {
return new int[][] {newInterval};
}
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
List<int[]>tmp = new ArrayList<>();
tmp.add(newInterval);
for (int i = 0; i < intervals.length; i++) {
int[] before = tmp.get(tmp.size() - 1);
if (canMerge(before, intervals[i])) {
tmp.remove(tmp.size() - 1);
tmp.add(new int[] { Math.min(before[0], intervals[i][0]), Math.max(before[1], intervals[i][1]) });
} else {
tmp.remove(tmp.size() - 1);
tmp.add(intervals[i]);
tmp.add(before);
}
}
Collections.sort(tmp, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
// TODO Auto-generated method stub
return o1[0]-o2[0];
}
});
int[][] res = new int[tmp.size()][];
for(int index = 0;index<tmp.size() ;index++) {
res[index] = tmp.get(index);
}
return res;
}
public boolean canMerge(int[] a,int[] b) {
if(a[0] == b[0]) {
return true;
}else if(a[0] < b[0]) {
if(a[1] >= b[0]) {
return true;
}else {
return false;
}
}else {
if(b[1] >= a[0]) {
return true;
}else {
return false;
}
}
}