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;
}
相关推荐
EterNity_TiMe_3 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
陌小呆^O^8 分钟前
Cmakelist.txt之win-c-udp-client
c语言·开发语言·udp
机器学习之心13 分钟前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds24 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao1 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian1 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz2 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang3 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca3 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法