当前位置: 首页 > news >正文

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

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

  • 一、博客声明
  • 二、题目描述
  • 三、解题思路
    • 1、知识补充
      •   使用qsort函数对二维数组进行排序。
    • 2、思路说明
  • 四、解题代码(附注释)

一、博客声明

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


二、题目描述

  以数组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;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 继承关系中的访问控制
  • 实战 | YOLOv8使用TensorRT加速推理教程(步骤 + 代码)
  • Python股票计算小程序(字符串格式化练习)
  • UE5 04-重新加载当前场景
  • c++内存管理(上)
  • 论文辅助笔记:ST-LLM
  • UE5 修改项目名称 类的名称
  • 了解Adam和RMSprop优化算法
  • 基于深度学习的图像补全
  • elementPlus-vue3-ts表格单选和双选实现方式
  • 【C++】C++入门基础--命名空间,缺省参数,函数重载
  • RTOS系统 -- 调试大法之FreeRTOS在M4上实现coredump功能
  • Spark操作Excel最佳实践
  • 66.Python-web框架-Django-免费模板django-datta-able的分页的一种方式
  • Java核心技术【十八】Java集合框架精讲:List、Set、Map
  • [nginx文档翻译系列] 控制nginx
  • 【个人向】《HTTP图解》阅后小结
  • 2017前端实习生面试总结
  • hadoop集群管理系统搭建规划说明
  • java中具有继承关系的类及其对象初始化顺序
  • Js基础知识(四) - js运行原理与机制
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MySQL主从复制读写分离及奇怪的问题
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • ucore操作系统实验笔记 - 重新理解中断
  • unity如何实现一个固定宽度的orthagraphic相机
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 从tcpdump抓包看TCP/IP协议
  • 二维平面内的碰撞检测【一】
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 跨域
  • 使用 Docker 部署 Spring Boot项目
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微信小程序设置上一页数据
  • 我的业余项目总结
  • 智能网联汽车信息安全
  • ionic入门之数据绑定显示-1
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • #php的pecl工具#
  • $.ajax中的eval及dataType
  • (02)vite环境变量配置
  • (arch)linux 转换文件编码格式
  • (C语言)字符分类函数
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计ssm电影分享网站
  • (每日一问)基础知识:堆与栈的区别
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)