Problem Description:
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.
Analysis:
这道题可以和前面56. Merge Intervals关联起来,只需要将插入的一个点放进数组中,方法和上一题一样,进行排序然后合并最后生成结果。代码如下:
Code:
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int[][] temp = new int[intervals.length + 1][2];
System.arraycopy(intervals, 0, temp, 0, intervals.length);
temp[intervals.length][0] = newInterval[0];
temp[intervals.length][1] = newInterval[1];
Arrays.sort(temp, new Comparator<int[]>() {
public int compare(int[] c1, int[] c2) {
if(c1[0] == c2[0]) {
return c1[1] - c2[1];
}
return c1[0] - c2[0];
}
});
int i = 0;
int j = 1;
int k = 1;
while(i + j < intervals.length + 1) {
if(temp[i][1] < temp[i + j][0]) {
k++;
temp[i + 1] = temp[i + j];
i++;
j = 1;
} else {
temp[i][1] = Math.max(temp[i][1], temp[i + j][1]);
j++;
}
}
int[][] res = new int[k][2];
System.arraycopy(temp, 0, res, 0, k);
return res;
}
}