标签:重叠 res 力扣 intervals 端点 移除 区间 435 leetcode
Topic:
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:
可以认为区间的终点总是大于它的起点。
区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
Example 1:
输入: [ [1,2], [2,3], [3,4], [1,3] ]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。
Example 2:
输入: [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。
Example 3:
输入: [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。
思路:
首先按照区间右侧端点值进行排序
(按照左侧区间排序思路类似,但需要增加许多判断)
之后从右端点第二小的区间开始
如果右端点第二小的区间左侧端点仍然比最小右端点区间的左侧端点小
则需要删除此区间,需要删除的区间数res += 1
若发现左侧端点比最小右区间的右端点大或相等
则将新的区间右端点设置为新的整体右区间端点
依次类推,直至遍历完所有
此题贪心算法思路与leetcode 452. 用最少数量的箭引爆气球 及其相似,可供参考
Code:
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
intervals.sort(key=lambda x: x[1])
res = 0
if len(intervals) == 0:
return 0
i = 1
a = 0
while i < len(intervals):
if intervals[a][1] > intervals[i][0]:
res += 1
i += 1
else:
a = i
i += 1
return res
标签:重叠,res,力扣,intervals,端点,移除,区间,435,leetcode 来源: https://blog.csdn.net/weixin_50791900/article/details/112130088
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。