Letcode打卡系列------3

986. 区间列表的交集

题目描述:给定两个由一些闭区间组成的列表,每个区间都是成对且不相交的,并且已经排序,返回这两个区间列表的交集。
示例:
输入: A=[[0,2],[5,10],[13,23],[24,25]], B=[[1,5],[8,12],[15,24],[25,26]]
输出:[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]

思路:如果A区间的起点在B区间起点的左边或重合,则A区间的终点要在B区间起点的右边或重合,才会有交集。如果A区间的起点在B区间起点的右边或重合,则B区间的终点要在A区间的起点的右边或重合才会有交集。

#参考代码

class Solution:
    def intervalIntersection(self, A: List[List[int]], B: List[List[int]]) -> List[List[int]]:
    	#定义新的列表,存放交集
        C = []
        i = j = 0
        while i < len(A) and j < len(B):
        	#起点的最大值
            left = max(A[i][0], B[j][0])
            #终点的最小值
            right = min(A[i][1], B[j][1])
            #如果起点的最大值小于终点的最小值,则放入列表
            if left <= right:
                C.append([left, right])
            #如果A区间终点小于B区间终点,则A换下一个区间进行比较
            if A[i][1] < B[j][1]:
                i += 1
            #同理,B换下一个区间进行比较
            else:
                j += 1
        return C

你可能感兴趣的:(算法,算法,python)