第三天——贪心算法——区间问题

题目描述

给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。

输入输出样例

输入是一个数组,包含多个长度固定为的子数组,表示每个区间的开始和结尾。输出一个 整数,表示需要移除的区间数量。

Input: \[1,2, 2,4, 1,3]

Output: 1

在这个样例中,我们可以移除区间,使得剩余的区间\[1,2,2,4] 互不重叠。

题解

求最少的移除区间个数,等价于尽量多保留不重叠的区间 。在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其它区间的空间就越大 ,就越能保留更多的区间。因此,我们采取的贪心策略为,优先保留结尾小且不相交的区间 。 具体实现方法为,先把区间按照结尾的大小进行增序排序**(利用lambda函数)**每次选择结尾最小且和前一个选择的区间不重叠的区间。

在样例中,排序后的数组为 \[1,2, 1,3,2,4,],按照我们的贪心策略,首先初始化为区间1,2,;由于1,2和1,3相交,我们跳过该区间;由于2,4和1,2不相交,我们将其保留。因此最终保留的区间为1,2,2,4。

完整代码

复制代码
def eraseOverlapIntervals(intervals: list[list[int]]):
	intervals.sort(key=lambda x: x[1])
	removed, prev_end = 0, intervals[0][1]
	for i in range(1, len(intervals)):
		if prev_end > intervals[i][0]:
			removed += 1
		else:
			prev_end = intervals[i][1]
		return removed
print(eraseOverlapIntervals([[1, 2],[2, 4],[1, 3]]))
相关推荐
禁默5 分钟前
论文解读与思考:基于场所地图的标识感知机器人探索方法及工程参考的价值
人工智能·深度学习·算法·机器人
维克兜率天6 分钟前
【维克】统计套利建模:从因子到信号的完整流程
android·开发语言·python·算法·kotlin
Zentceh12 分钟前
PixelClean 这类 AI 降噪算法是怎么工作的?从 RAW 域到 GAN 色彩重建的技术拆解
图像处理·人工智能·科技·算法·计算机视觉·车载系统·智能硬件
用户03906147071917 分钟前
无感观测器理论模型(NTSM-SMO-PLL 与 SMO-PLL)
算法
垆边人似月.28 分钟前
找出最小的 K 个数
数据结构·c++·算法
熊猫钓鱼>_>34 分钟前
当工具成为类:Softmax困境与连接器过载的算法根源
算法·ai·agent·工具·曲线·华为云码道·生态图鉴
信奥卷王43 分钟前
[GESP202503 六级] 树上漫步(含视频)
算法
Purple Coder1 小时前
南京-我来啦
算法
w_zero_one1 小时前
动态规划(三)
java·算法·动态规划
Logic1011 小时前
C语言/数据结构贡献法题解:数组权值——所有连续子数组中不同数字个数之和(O(n)解法)
c语言·数据结构·算法·数组·时间复杂度·贡献法·哈希记录