返回
LeetCode 986 划重点!从“区间列表的交集”问题中提取思维火花
前端
2023-12-24 20:02:42
算法剖析:突破思维障碍,化繁为简
“区间列表的交集”问题乍看之下似乎有些复杂,但仔细分析后,可以发现其核心思想非常简单:在两个已知区间列表中,寻找出它们彼此相交的部分。这就是我们所说的“交集”。为了求得交集,我们需要采取如下步骤:
-
数据结构准备: 使用数据结构存储区间列表,便于快速比较和查找。本题中,我们可以使用元组
(start, end)
来表示每个区间,其中start
表示区间的起始点,end
表示区间的终点。 -
遍历区间列表: 使用双层循环遍历两个区间列表。外层循环遍历第一个列表,内层循环遍历第二个列表。
-
判断区间是否相交: 在内层循环中,比较当前的两个区间是否相交。我们可以使用以下条件来判断两个区间是否相交:
if start1 <= end2 and start2 <= end1:
# 区间相交
- 记录交集: 如果当前的两个区间相交,那么将它们添加到交集列表中。
代码实现:简洁明了,一览无余
掌握了算法思想后,我们就可以将它转化为代码。以下是用 Python 实现的代码:
def interval_intersection(firstList, secondList):
"""
:type firstList: List[List[int]]
:type secondList: List[List[int]]
:rtype: List[List[int]]
"""
# 初始化交集列表
intersection = []
# 遍历第一个区间列表
for interval1 in firstList:
start1, end1 = interval1
# 遍历第二个区间列表
for interval2 in secondList:
start2, end2 = interval2
# 判断区间是否相交
if start1 <= end2 and start2 <= end1:
# 区间相交,将交集添加到列表中
intersection.append([max(start1, start2), min(end1, end2)])
# 返回交集列表
return intersection
进阶思考:灵活运用,触类旁通
掌握了“区间列表的交集”问题的解决方法后,您还可以将其拓展到其他类似问题中。例如,您可以在算法竞赛中遇到以下问题:
- 给定一个由一些区间组成的列表,求出这些区间的并集。
- 给定一个由一些区间组成的列表,求出这些区间的差集。
- 给定一个由一些区间组成的列表,求出这些区间的对称差集。
这些问题都可以通过类似的方法来解决。