1、qsort()函数之cmp
qsort(intervals,intervalsSize,sizeof(intervals),cmp);
在这里 intervals 是指向二维数组的二级指针。那我这里要按照数组第一个元素的大小排序,cmp函数该怎么写呢?
假设interval :[ [1,4], [0,3] ];
要求排序后是:[ [0,3], [1,4] ];
答:我这里cmp函数这样写:
int cmp(const void *a, const void *b){//参数一定得这样写
int **p1 = (int **)a;//指向a的第一个元素,也就是[1,4]中的1
int **p2 = (int **)b;//指向b的第一个元素,也就是[0,3]中的0
return (**p1)-(**p2);
}
2、问题描述
3、算法如下
请结合代码看
int cmp(const void *a, const void *b){
int **p1 = (int **)a;
int **p2 = (int **)b;
return (**p1)-(**p2);
}
int max(int a , int b){
return a>b?a:b;
}
int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){
int ** res = (int **)malloc(sizeof(int *)*intervalsSize);
*returnColumnSizes = (int *)malloc(sizeof(int)*intervalsSize);
int mask[intervalsSize+1];
memset(mask,0,sizeof(mask));
qsort(intervals,intervalsSize,sizeof(intervals),cmp);
//for(int j=0; j< intervalsSize; j++)
// printf("[%d,%d] ",intervals[j][0],intervals[j][1]);
for(int i=0; i< intervalsSize-1; i++){
if(intervals[i][1] >= intervals[i+1][0]){
intervals[i+1][0] = intervals[i][0];
intervals[i+1][1] = max(intervals[i][1],intervals[i+1][1]);
mask[i]=1;
}
}
int k=0;
for(int i=0; i< intervalsSize; i++){
if(mask[i]==1)
continue;
res[k] = (int *)malloc(sizeof(int)*2);
memcpy(res[k],intervals[i],sizeof(res[k]));
(*returnColumnSizes)[k]=2;
k++;
}
*returnSize = k;
return res;
}