lc986. Interval List Intersections

317 阅读1分钟
  1. Interval List Intersections Medium

1386

43

Add to List

Share Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order.

Return the intersection of these two interval lists.

(Formally, a closed interval [a, b] (with a <= b) denotes the set of real numbers x with a <= x <= b. The intersection of two closed intervals is a set of real numbers that is either empty, or can be represented as a closed interval. For example, the intersection of [1, 3] and [2, 4] is [2, 3].)

Example 1:

Input: A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]] Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]

Note:

0 <= A.length < 1000 0 <= B.length < 1000 0 <= A[i].start, A[i].end, B[i].start, B[i].end < 10^9

思路:indexA和indexB作为A,B的下标, 1.比较A的right和B的left,A的right<B的left,A和B肯定不相交,indexA++ 2.比较B的right和A的left,B的right<A的left,A和B肯定不相交,indeB++ 3.排除上面两种情况,AB肯定相交,l=max(A[indexA][0],B[indexB][0]) r=min(A[indexA][len(A[indexA])-1],B[indexB][len(B[indexB])-1]),找到相交的首尾,添加到result列表中 代码:python3

class Solution:
    def intervalIntersection(self, A: List[List[int]], B: List[List[int]]) -> List[List[int]]:
        indexA=0
        indexB=0
        list=[]
        while indexA<len(A) and indexB<len(B):
            aleft=A[indexA][0]
            aright=A[indexA][len(A[indexA])-1]
            bleft=B[indexB][0]
            bright=B[indexB][len(B[indexB])-1]
            if aright<bleft:
                indexA=indexA+1
                continue

            
            if bright<aleft:
                indexB=indexB+1
                continue
            l=max(aleft,bleft)
            r=min(aright,bright)
            if aright>bright:
            	indexB=indexB+1
            else:
            	indexA=indexA+1
            list.append([l,r])
        return list
        print(list)

            
if __name__ == '__main__':
    print(Solution().intervalIntersection([[0,2],[5,10],[13,23],[24,25]],[[1,5],[8,12],[15,24],[25,26]])) 

时间复杂度:O(M+N) 空间复杂度:O(M+N)