贪心算法-合并区间(LeetCode 56)

定义

先找局部最优,然后推出全局最优

套路

这玩意没有套路

合并区间的解题思路

先按照左边界进行一个排序

区间的左边界小于等于上一个区间的右边界,则一定存在重叠,合并区间。

否则就是不重叠,直接将这个区间加入到结果列表中

PREP

这道题的核心在于排序以及如何判定两个区间是需要合并的;


首先把所有区间按照起点从小到大进行排序。

维护一个数组用于存储合并后的区间

然后遍历所有的区间

如果当前数组为空,则直接将这个区间append

否则拿当前区间和数组中最后一个合并区间进行对比,如果当前区间的起点小于等于上一个区间的终点,则证明他们是有重叠的。将他们进行合并

如果不是,则直接将该区间添加到数组中


综上,算法的瓶颈在于排序(如果区间无序,新区间可能和前面任意一个区间重叠,就需要和全部历史区间对比),时间复杂度是O(nlogn)。区间互不重叠的时候,空间复杂度是O(n)

相关推荐
Shaoshing2 小时前
LeetCode100 49. 字母异位词分组
java·算法
YFJ_mily2 小时前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化
汤姆宝库3 小时前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法
moshuying5 小时前
块扩散 + GDN 改造:Clover 把「并行生成」塞进了 Agent 的长上下文里
前端·算法
没落之王5 小时前
历史系统建模:宋初太祖太宗「再立天庭」秩序重构推演
人工智能·算法·重构
INGNIGHT6 小时前
91 · 最小调整代价(序列dp)
数据结构·算法·leetcode
moshuying6 小时前
扩散模型开始写代码、开网页了:350 亿参数,速度比 Jev 快一倍
前端·算法
小超人诞生日记6 小时前
C++ 异常机制详解:从抛出捕获到异常安全
c++·算法