C语言力扣刷题12——合并区间[排序]

一、博客声明

  找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬们的解题思路,开辟这个系列来记录。代码可能不是自己写的,不求方法最好,只求更多地理解大佬们的解题思路。


二、题目描述

  以数组intervals表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104

三、解题思路

1、知识补充

  使用qsort函数对二维数组进行排序。

  以二维数组的第一个元素为基准,使用qsort库函数对一维数组的排序,可以看之前的一个博客:C语言力扣刷题3——三数之和[快速排序+双指针]

比较函数写法:

int cmpfun(const void* a, const void* b){
    return (*(int**)a)[0] - (*(int**)b)[0];
}

qsort函数写法:

qsort(intervals, intervalsSize, sizeof(int*), cmpfun);

  

2、思路说明

  先排序,后逐个比较,根据情况构建返回数组。具体看下面的图片,可能会更清楚。
在这里插入图片描述

 


四、解题代码(附注释)

##比较函数
int cmpfun(const void* a, const void* b){
    return (*(int**)a)[0] - (*(int**)b)[0];
}

int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes) {
    qsort(intervals, intervalsSize, sizeof(int*), cmpfun);
    int** ret = malloc(sizeof(int*) * intervalsSize);
    int size = 0;
    ret[size++] = malloc(sizeof(int) * 2);
    ret[0][0] = intervals[0][0];
    ret[0][1] = intervals[0][1];
    for(int i = 1; i < intervalsSize; i++){
        if(intervals[i][0] <= ret[size - 1][1]){
            ret[size-1][1] = fmax(ret[size - 1][1], intervals[i][1]);
        } else {
            ret[size++] = malloc(sizeof(int) * 2);
            ret[size - 1][0] = intervals[i][0];
            ret[size - 1][1] = intervals[i][1];
        }
    }
    *returnSize = size;
    *returnColumnSizes =malloc(sizeof(int) * size);
    for(int i = 0; i < size; i++){
        (*returnColumnSizes)[i] = 2;
    }
    return ret;
}

相关推荐

  1. C语言】【小白的疑问

    2024-07-10 10:40:06       53 阅读
  2. 56. 合并区间

    2024-07-10 10:40:06       47 阅读
  3. 56.合并区间

    2024-07-10 10:40:06       59 阅读
  4. 56. 合并区间

    2024-07-10 10:40:06       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 10:40:06       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 10:40:06       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 10:40:06       90 阅读
  4. Python语言-面向对象

    2024-07-10 10:40:06       98 阅读

热门阅读

  1. [ABC275A] Find Takahashi 题解

    2024-07-10 10:40:06       24 阅读
  2. 洛谷 P2141 [NOIP2014 普及组] 珠心算测验

    2024-07-10 10:40:06       28 阅读
  3. 微软edge浏览器全解析

    2024-07-10 10:40:06       29 阅读
  4. react根据后端返回数据动态添加路由

    2024-07-10 10:40:06       27 阅读
  5. RedHat运维-Ansible自动化运维基础22-rhel-system-roles

    2024-07-10 10:40:06       22 阅读
  6. 深入浅出:Scikit-Learn基础教程

    2024-07-10 10:40:06       26 阅读
  7. python class

    2024-07-10 10:40:06       25 阅读
  8. 10.pwn ROP(栈溢出攻击的核心)

    2024-07-10 10:40:06       33 阅读
  9. sklearn基础教程

    2024-07-10 10:40:06       30 阅读
  10. 跨境支付新篇章:引领电商潮流

    2024-07-10 10:40:06       33 阅读