[ 题目描述 ]:
[ 思路 ]:
- intervals 有序,需要将一个新的范围插入,然后进行整合
- 方法一,将新的范围插入原 intervals 区间,然后使用 56 题的合并区间函数直接解决
- 方法二, 找出能够包容 newIntervals 的区间进行合并,与 newIntervals 不相交的范围直接插入到 ans 中
- 运行如下
int** insert(int** intervals, int intervalsSize, int* intervalsColSize, int* newInterval, int newIntervalSize, int* returnSize, int** returnColumnSizes) {
int** res=(int**)malloc(sizeof(int*) * (intervalsSize + 1));
*returnColumnSizes=(int*)malloc(sizeof(int) * (intervalsSize + 1));
int count=0;
int i=0;
while (i < intervalsSize && intervals[i][1] < newInterval[0]) {
res[count] = (int*)malloc(sizeof(int) * 2);
res[count][0]=intervals[i][0];
res[count][1]=intervals[i][1];
(*returnColumnSizes)[count++]=2;
i++;
}
while (i < intervalsSize && intervals[i][0] <= newInterval[1]) {
newInterval[0]=(newInterval[0] < intervals[i][0]) ? newInterval[0] : intervals[i][0];
newInterval[1]=(newInterval[1] > intervals[i][1]) ? newInterval[1] : intervals[i][1];
i++;
}
res[count]=(int*)malloc(sizeof(int) * 2);
res[count][0]=newInterval[0];
res[count][1]=newInterval[1];
(*returnColumnSizes)[count++] = 2;
while (i < intervalsSize) {
res[count]=(int*)malloc(sizeof(int) * 2);
res[count][0]=intervals[i][0];
res[count][1]=intervals[i][1];
(*returnColumnSizes)[count++]=2;
i++;
}
*returnSize=count;
return res;
}
[ 官方题解 ]:
- 一、模拟:具体思路同上