题目:力扣https://leetcode-cn.com/problems/insert-interval/
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int[][] finalInterval = new int[intervals.length+1][2];
int count = 0;
while(count<=intervals.length){
if(count<intervals.length){
finalInterval[count][0] = intervals[count][0];
finalInterval[count][1] = intervals[count][1];
}else{
finalInterval[count][0] = newInterval[count-intervals.length];
finalInterval[count][1] = newInterval[count-intervals.length+1];
}
count++;
}
return merge(finalInterval);
//return finalInterval;
}
public int[][] merge(int[][] intervals) {
int len = intervals.length;
//排序
quickSort(intervals,0,len-1);
//执行
List<int[]> path = new ArrayList<int[]>();
int left = 0;
int right = 0;
while(right<len){
int min = intervals[left][0];
int max = intervals[right][1];
while(right<intervals.length && intervals[right][0] <= max){
max = Math.max(max,intervals[right][1]);
right++;
}
path.add(new int[]{min,max});
left = right;
}
int[][] ans = new int[path.size()][2];
for(int i=0;i<path.size();i++){
ans[i][0] = path.get(i)[0];
ans[i][1] = path.get(i)[1];
}
return ans;
}
//快速排序
private void quickSort(int[][] intervals,int L,int R){
if(L>=R){
return;
}
int left = L;
int right = R;
int pivot = intervals[left][0];
while(left<right){
while(left<right && intervals[right][0]>=pivot){
right--;
}
if(left<right){//intervals[right][0]<pivot
int temp0 = intervals[left][0];
int temp1 = intervals[left][1];
intervals[left][0] = intervals[right][0];
intervals[left][1] = intervals[right][1];
intervals[right][0] = temp0;
intervals[right][1] = temp1;
}
while(left<right && intervals[left][0]<=pivot){
left++;
}
if(left<right){//intervals[left][0]>pivot
int temp0 = intervals[right][0];
int temp1 = intervals[right][1];
intervals[right][0] = intervals[left][0];
intervals[right][1] = intervals[left][1];
intervals[left][0] = temp0;
intervals[left][1] = temp1;
}
if(left>=right){
intervals[left][0] = pivot;
}
}
quickSort(intervals,L,right-1);
quickSort(intervals,right+1,R);
}
}
思路:这题跟 leetcode56.合并区间唯一的区别就是增加了一个数组,今天就稍稍偷个懒,直接将新的数组添进去,然后利用上一题的解法直接求解。