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

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------三数之和快速排序+双指针

比较函数写法:

c 复制代码
int cmpfun(const void* a, const void* b){
    return (*(int**)a)[0] - (*(int**)b)[0];
}

qsort函数写法:

c 复制代码
qsort(intervals, intervalsSize, sizeof(int*), cmpfun);

  

2、思路说明

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


四、解题代码(附注释)

c 复制代码
##比较函数
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;
}
相关推荐
ofoxcoding1 分钟前
Jev 模型评测深度解析:核心得分、能力局限与最佳适用任务场景
人工智能·算法·机器学习·ai
Evand J17 分钟前
【MATLAB例程】三维A*路径规划与TOA-AOA-TDOA融合定位算法。附下载链接
数据库·算法·matlab
Doubbbbbbble云27 分钟前
图算法中的剪枝技术与启发式优化分析4
算法·机器学习·剪枝
鶴哥只手遮天29 分钟前
CFL3D深度解析:NASA经典CFD求解器的架构、算法与工程实践
算法
她说彩礼65万30 分钟前
C语言 单引号与双引号
java·服务器·c语言
维克兜率天31 分钟前
【维克】价差交易实战:配对交易的核心参数设置
大数据·笔记·算法·量化
dtq042431 分钟前
数据结构 - 树的概念
c语言·数据结构·学习·算法
晒太羊的猫31 分钟前
hot100多维动态规划刷题
算法·动态规划
山下梅子酒22535 分钟前
洛谷-入门-B2075
c语言
Dream it possible!36 分钟前
LeetCode_热题100_知识点总结
算法·leetcode·职场和发展