题目:Merge Intervals

给定n个区间合并重合区间

思路:

先按照区间起点排序,然后合并下面情况:

1.起点相同,以最大的终点为新的终点;

2.前一个终点大于后一个的起点。

/***************************************************************************************************
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
***************************************************************************************************/
#include<stdio.h>struct Interval {int start;int end;
};/*按区间起点排序*/
int cmp(const void *a , const void *b){struct Interval *intval1 = (struct Interval *)a;struct Interval *intval2 = (struct Interval *)b;return intval1->start - intval2->start;
}/*** Definition for an interval.* struct Interval {*     int start;*     int end;* };*/
/*** Return an array of size *returnSize.* Note: The returned array must be malloced, assume caller calls free().*/
struct Interval* merge(struct Interval* intervals, int intervalsSize, int* returnSize) {if(intervalsSize == 0){//数组为0*returnSize = 0;return NULL;}if(intervalsSize == 1){//只有一个区间*returnSize = 1;struct Interval *retIntv = (struct Interval*)malloc(sizeof(struct Interval));retIntv[0].start = intervals[0].start;retIntv[0].end = intervals[0].end;return retIntv;}qsort(intervals,intervalsSize,sizeof(struct Interval),cmp);//排序int length = 0,end = 0;int *starts = (int *)malloc(intervalsSize*sizeof(int));int *ends = (int *)malloc(intervalsSize*sizeof(int));memset(starts,-1,intervalsSize*sizeof(int));memset(ends,-1,intervalsSize*sizeof(int));for(int i = 0;i < intervalsSize;i++){starts[length] = intervals[i].start;ends[length] = intervals[i].end;while(i < intervalsSize - 1 && ends[length] >= intervals[i + 1].start){//合并前一个终点大于后一个的起点的区间i++;ends[length] = ends[length] > intervals[i].end ? ends[length] : intervals[i].end;}length++;}struct Interval *retIntv = (struct Interval*)malloc(length*sizeof(struct Interval));for(int i = 0;i < length;i++){retIntv[i].start = starts[i];retIntv[i].end = ends[i];}free(starts);free(ends);*returnSize = length;return retIntv;
}void main(){//[1,3],[2,6],[8,10],[15,18]//[1,6],[2,3],[8,10],[15,18]//[1,6],[8,10],[2,3],[15,18]struct Interval *intervals = (struct Interval *)malloc(1*sizeof(struct Interval));intervals[0].start = 1;intervals[0].end = 6;//intervals[1].start = 5;//intervals[1].end = 10;//intervals[2].start = 2;//intervals[2].end = 3;//intervals[3].start = 15;//intervals[3].end = 18;int length = 0;struct Interval *retIntv = merge(intervals,1,&length);for(int i = 0;i < length;i++){printf("[%d,%d]\n",retIntv[i].start,retIntv[i].end);}free(intervals);free(retIntv);
}

转载于:https://www.cnblogs.com/yeqluofwupheng/p/6670543.html

[LeetCode]Merge Intervals相关推荐

  1. [leetcode]Merge Intervals @ Python

    原题地址:https://oj.leetcode.com/problems/merge-intervals/ 题意: Given a collection of intervals, merge al ...

  2. LeetCode Merge Intervals

    Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...

  3. LeetCode:Merge Intervals

    题目链接 Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6 ...

  4. LeetCode - Merge Intervals

    02.08.2021 小白一枚,文章仅当日记本记录学习进度 ;) 如被浏览,请多多指教,非常感谢大家纠错与建议! (因留学顺便练习英语,所以部分用英文笔记,并无他意) Solution 1 - sor ...

  5. 【细节实现题】LeetCode 56. Merge Intervals

    LeetCode 56. Merge Intervals Solution1:我的答案 这道题思路不难,有个坑爹的地方在于输入的区间向量未必是有序的,所以利用优先队列priority_queue来排序 ...

  6. 【leetcode】56. Merge Intervals 相邻线段归并

    1. 题目 Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2, ...

  7. C#LeetCode刷题之#56-合并区间(Merge Intervals)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3676 访问. 给出一个区间的集合,请合并所有重叠的区间. 输入: ...

  8. 56. Merge Intervals(合并区间)解法(C++ 注释)

    56. Merge Intervals(合并区间) 1. 题目描述 2. 排序(Sorting) 2.1 解题思路 2.2 实例代码 1. 题目描述 给出一个区间的集合,请合并所有重叠的区间. 示例 ...

  9. LeetCode 56. Merge Intervals

    原题链接在这里:https://leetcode.com/problems/merge-intervals/ 题目: Given a collection of intervals, merge al ...

最新文章

  1. 她在博士阶段破釜沉舟转换研究方向后,发表了32篇SCI
  2. wap站点优于传统站点的异同分析
  3. Android源码解析--AlertDialog及AlertDialog.Builder
  4. 物联网正在蚕食嵌入式系统市场
  5. OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3
  6. openstack 云_使用OpenStack打造云事业
  7. 内存条上面参数详解_价格极低的国产颗粒内存条:光威弈系列Pro评测,超频表现超稳定...
  8. 剑指 Offer II 109. 开密码锁
  9. java的package需要大写吗,java 数字转大写的小程序
  10. 基于wemos d1 按键开锁
  11. 一网打尽车载以太网之SOMEIP(上)
  12. CISP能线上考试吗?
  13. OpenNESS OpenVINO Demo 部署
  14. eui显示玩家服务器,EUI - 魔兽世界最贴心的插件
  15. 微信公众号java开发沉淀(五)推送群发消息
  16. 微信开发者工具button,input鼠标点击坐标偏移
  17. 进出队C语言不用链表,C语言面试题总汇简要
  18. 淘宝推荐最靠谱的补单平台排行榜
  19. 如何从零开始设计一款小程序原型?
  20. 基于关系型代数的 SQL 等价改写

热门文章

  1. SSM中怎样使用JUnit4+spring-test编写单元测试
  2. 怎样查看mysql的安装路径
  3. 11、mybatis返回List
  4. 3、SpringBoot整合MyBatis注解版及配置文件版
  5. 三点到六点是几个小时_环卫工在10吨垃圾里找了6小时,终于找到这张价值19万元的餐巾纸...
  6. pytorch 语义分割loss_Recall Loss:用于不平衡图像分类和语义分割的召回损失
  7. c语言什么是内联函数,C语言中内联函数inline的使用方法
  8. 神策数据助力海尔落地 6 大智慧厨房在线场景
  9. 虎扑签约神策数据,媒体 + 电商数据新玩法
  10. node 原生实现服务端 websocket