解题思路
- 暴力解法
对A中的每一块,都用B的每一块去做交集。复杂度o(n×m)
class Solution:
def intervalIntersection(self, firstList: List[List[int]], secondList: List[List[int]]) -> List[List[int]]:
intersactList = []
if len(firstList)==0 or len(secondList)==0 :
return []
for a in firstList:
for b in secondList:
if b[1] < a[0] :
continue
elif b[0] > a[1] :
break
else:
start = max(a[0], b[0])
end = min(a[1], b[1])
intersactList.append([start, end])
return intersactList
- 优化:双指针
两个指针分别指向A和B,比较谁的end小就将谁的指针后移一位,复杂度o(n+m)。
class Solution:
def intervalIntersection(self, firstList: List[List[int]], secondList: List[List[int]]) -> List[List[int]]:
intersactList = []
if len(firstList)==0 or len(secondList)==0 :
return []
i,j = 0, 0
while i<len(firstList) and j<len(secondList):
start = max(firstList[i][0], secondList[j][0])
end = min(firstList[i][1], secondList[j][1])
if start <= end:
intersactList.append([start, end])
if firstList[i][1] > secondList[j][1]:
j += 1
else:
i += 1
return intersactList
对比十分明显