返回
快速删除无用区间,优化区间合并效率
前端
2024-01-16 02:37:56
路飞 | 《LeetCode》1288_删除被覆盖区间
1. 题目介绍
题目给你一个包含闭区间形式的区间的集合intervals和另一个闭区间newInterval,你需要删除所有被newInterval完全覆盖的区间,并返回更新后的intervals。
2. 思路分析
我们可以使用贪心算法来解决这个问题。遍历intervals中的每一个区间,如果当前区间与newInterval没有交集,则直接添加到结果中。如果当前区间与newInterval有交集,则将当前区间与newInterval合并,合并后的区间添加到结果中。
3. 具体实现
def remove_covered_intervals(intervals, new_interval):
"""
:type intervals: List[List[int]]
:type new_interval: List[int]
:rtype: List[List[int]]
"""
result = []
# 遍历intervals中的每个区间
for interval in intervals:
# 如果当前区间与newInterval没有交集,则直接添加到结果中
if not has_intersection(interval, new_interval):
result.append(interval)
# 如果当前区间与newInterval有交集,则将当前区间与newInterval合并
else:
result.append(merge_intervals(interval, new_interval))
return result
def has_intersection(interval1, interval2):
"""
判断两个区间是否有交集
:param interval1: 区间1
:param interval2: 区间2
:return: True if there is an intersection, False otherwise
"""
return not (interval1[1] < interval2[0] or interval2[1] < interval1[0])
def merge_intervals(interval1, interval2):
"""
合并两个区间
:param interval1: 区间1
:param interval2: 区间2
:return: 合并后的区间
"""
return [min(interval1[0], interval2[0]), max(interval1[1], interval2[1])]
4. 算法复杂度
该算法的时间复杂度为O(n log n),其中n为intervals中的区间的个数。
5. 总结
这道题考察了区间合并的技巧,我们可以使用贪心算法来解决这个问题,从而达到快速删除被覆盖区间的目的。