读完本文,你可以去力扣拿下如下题目:

56.合并区间

-----------

上篇文章用贪心算法解决了区间调度问题:给你很多区间,让你求其中的最大不重叠子集。

其实对于区间相关的问题,还有很多其他类型,本文就来讲讲区间合并问题(Merge Interval)。

LeetCode 第 56 题就是一道相关问题,题目很好理解:

我们解决区间问题的一般思路是先排序,然后观察规律。

PS:我认真写了 100 多篇原创,手把手刷 200 道力扣题目,全部发布在 labuladong的算法小抄,持续更新。建议收藏,按照我的文章顺序刷题,掌握各种算法套路后投再入题海就如鱼得水了。

一、思路

一个区间可以表示为 [start, end],前文聊的区间调度问题,需要按 end 排序,以便满足贪心选择性质。而对于区间合并问题,其实按 endstart 排序都可以,不过为了清晰起见,我们选择按 start 排序。

显然,对于几个相交区间合并后的结果区间 xx.start 一定是这些相交区间中 start 最小的,x.end 一定是这些相交区间中 end 最大的。

由于已经排了序,x.start 很好确定,求 x.end 也很容易,可以类比在数组中找最大值的过程:

int max_ele = arr[0];
for (int i = 1; i < arr.length; i++) max_ele = max(max_ele, arr[i]);
return max_ele;

二、代码

# intervals 形如 [[1,3],[2,6]...]
def merge(intervals):if not intervals: return []# 按区间的 start 升序排列intervals.sort(key=lambda intv: intv[0])res = []res.append(intervals[0])for i in range(1, len(intervals)):curr = intervals[i]# res 中最后一个元素的引用last = res[-1]if curr[0] <= last[1]:# 找到最大的 endlast[1] = max(last[1], curr[1])else:# 处理下一个待合并区间res.append(curr)return res

看下动画就一目了然了:

至此,区间合并问题就解决了。本文篇幅短小,因为区间合并只是区间问题的一个类型,后续还有一些区间问题。本想把所有问题类型都总结在一篇文章,但有读者反应,长文只会收藏不会看… 所以还是分成小短文吧,读者有什么看法可以在留言板留言交流。

本文终,希望对你有帮助。

_____________

我的 在线电子书 有 100 篇原创文章,手把手带刷 200 道力扣题目,建议收藏!对应的 GitHub 算法仓库 已经获得了 70k star,欢迎标星!

数组的合并和升序排列_区间调度问题之区间合并相关推荐

  1. 数组的合并和升序排列_每日“力扣”系列10 下一个排列

    今天继续力扣数组标签的算法题,力扣第31题,难度等级为中等,题目描述如下: 题目要点概括如下: 1.输入部分为一个有顺序的数组,按照数字的前后顺序,这个数字代表着一个位数不定的数字,这里程它为原数字. ...

  2. 数组的合并和升序排列_JavaScript - 数组排序 6 种常见算法是什么?

    前言 着急用的话,选择前两个就行了,后面的看看就好. 开发中,遇到数组排序的需求很频繁,这篇文章会介绍几个常见排序思路. 一.希尔排序(性能最好) 如果要从大到小排列,则 while(arr[n] & ...

  3. 数组的合并和升序排列_leetcode No.31 下一个排列

    题目链接: 下一个排列 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个 ...

  4. 数组的合并和升序排列_leetcode 33 搜索旋转排序数组

    给你一个升序排列的整数数组 nums ,和一个整数 target . 假设按照升序排序的数组在预先未知的某个点上进行了旋转.(例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0 ...

  5. 在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本操作之一。插入法排序算法

    我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n.函数定义为int f(int a[],int number,int n); #include <stdi ...

  6. 单一类型数组中的去重升序排列问题

    得到一组新的单一类型且未知长度的数组,要求剔除掉其中重复的数据,并按照升序排列此已去重的数组 1.目标:把旧数组里面不重复的元素选取出来放到新数组中,重复的元素只保留一个,放到新数组中去重. 2.核心 ...

  7. wireshark合并多个文件_小技巧:快速合并多个excel文件(收藏版)

    我们在日常工作或科研中,总会遇到需要汇总多个excel的情况,若仅仅是几个表格,大多人会直接复制,若有上百个表格呢?     那么小编就告诉大家一个稍微简洁一点的方法,将多个单独的excel表格快速合 ...

  8. C语言实现int数组类型冒泡法升序排列

    #include <stdio.h> void zjj(int* zyq,int sz)//当传递的是数组时传递的是数组第一个数的指针 {     int i=0;     int j=0 ...

  9. python写csv文件按升序排列_用python给csv里的数据排序的具体代码

    1.使用argparse组件,获取命令行参数:使用re组件,获取需要查找的字符串所在行 2.使用pandas组件,对文件进行排序. 3.命令行执行数据获取及排序,写入文件: 以下是完整代码: #cod ...

最新文章

  1. Knowladge_网站学习_jQuery插件
  2. VC内存泄露检查工具:Visual Leak Detector
  3. vue学习:7、路由跳转
  4. qt中update()的粗略理解
  5. ubuntu14.04-64位机配置android开发环境,ADT,sdk,eclipsea
  6. aelf宣布推出集中式资产管理系统CAM
  7. fer2013人脸表情数据实践
  8. Atitit.复合文档的格式 标准化格式
  9. 学习总结(一):ad画板总结
  10. vrep和simulink联合仿真
  11. mescroll源码
  12. [创翼]解除一机一号限制,并实现断电、断网后自动拨号(附:高校进阶个人组网方案)
  13. java开源cad_.Net开源项目(包含CAD支持)
  14. 2020年5月-苹果审核新规则
  15. 7-4 疯狂星期四!!!!!
  16. 西游记中金箍棒的来历和巨大威力
  17. Web全栈~18.jQuery
  18. DigitalPersona 指纹仪的使用
  19. 【Codeforces】764A Compote
  20. Go基础天天练之通道

热门文章

  1. 2017年回顾及总结
  2. 几个重要库函数的实现
  3. Hbase 查看 rowkey在哪个region中
  4. Dubbo-gok8s注册中心设计方案与实现
  5. 基于X-Engine引擎的实时历史数据库解决方案揭秘
  6. 如何快速完成企业应用IPv6改造
  7. 秒级启动万个容器,探秘阿里云容器镜像加速黑科技
  8. 阿里云 ESSD 采用自研新一代存储网络协议,打造“超级高速”
  9. UI2Code智能生成Flutter代码——版面分析篇
  10. leetcode算法题解(Java版)-16-动态规划(单词包含问题)