返回

LeetCode 986 划重点!从“区间列表的交集”问题中提取思维火花

前端

算法剖析:突破思维障碍,化繁为简

“区间列表的交集”问题乍看之下似乎有些复杂,但仔细分析后,可以发现其核心思想非常简单:在两个已知区间列表中,寻找出它们彼此相交的部分。这就是我们所说的“交集”。为了求得交集,我们需要采取如下步骤:

  1. 数据结构准备: 使用数据结构存储区间列表,便于快速比较和查找。本题中,我们可以使用元组 (start, end) 来表示每个区间,其中 start 表示区间的起始点,end 表示区间的终点。

  2. 遍历区间列表: 使用双层循环遍历两个区间列表。外层循环遍历第一个列表,内层循环遍历第二个列表。

  3. 判断区间是否相交: 在内层循环中,比较当前的两个区间是否相交。我们可以使用以下条件来判断两个区间是否相交:

if start1 <= end2 and start2 <= end1:
    # 区间相交
  1. 记录交集: 如果当前的两个区间相交,那么将它们添加到交集列表中。

代码实现:简洁明了,一览无余

掌握了算法思想后,我们就可以将它转化为代码。以下是用 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

进阶思考:灵活运用,触类旁通

掌握了“区间列表的交集”问题的解决方法后,您还可以将其拓展到其他类似问题中。例如,您可以在算法竞赛中遇到以下问题:

  • 给定一个由一些区间组成的列表,求出这些区间的并集。
  • 给定一个由一些区间组成的列表,求出这些区间的差集。
  • 给定一个由一些区间组成的列表,求出这些区间的对称差集。

这些问题都可以通过类似的方法来解决。