这个题,一看没思路,其实再看也没思路。
开始想着把两个列表合并,然后操作,发现不靠谱!!!
所以,别着急,一贯思路:
不着急+第一思路不靠谱+好好想!
毕竟面试或者机试想不出来也就跪了。
这个题,看了题解,发现还是双指针靠谱。
题目
如下
986. 区间列表的交集
给定两个由一些 闭区间 组成的列表,每个区间列表都是成对不相交的,并且已经排序。
返回这两个区间列表的交集。
(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。
两个闭区间的交集是一组实数,要么为空集,要么为闭区间。
例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)
默写代码,这个题用双指针,先写伪代码
def xxx():
i = 0
j = 0
while i<A and j<B
如果交集
保存结果干嘛干嘛
i,j怎么动
如果不交
i,j怎么动
好了,话不多说,上真代码,show you my code.
class Solution(object):
def intervalIntersection(self, A, B):
"""
:type A: List[List[int]]
:type B: List[List[int]]
:rtype: List[List[int]]
"""
i = 0
j = 0
res = []
while i<len(A) and j<len(B):
# mei you jiao ji
if A[i][1] < B[j][0] or B[j][1] < A[i][0]:
if A[i][1] < B[j][0]:
i+=1
elif B[j][1] < A[i][0]:
j+=1
# you jiao ji
else:
start = max(A[i][0],B[j][0])
end = min(A[i][1],B[j][1])
res.append([start,end])
if A[i][1] < B[j][1]:
i+=1
elif A[i][1] > B[j][1]:
j+=1
else:
i+=1
j+=1
return res
提交。
一不小心双百了。。。
好了,今天的每日一题的AndyJ的爸爸就到这里了。