- 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)