leetcode.56合并区间(C语言),qsort()函数之cmp

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;
}

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值