跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode986.区间列表的交集

这个题,一看没思路,其实再看也没思路。
开始想着把两个列表合并,然后操作,发现不靠谱!!!
所以,别着急,一贯思路:
不着急+第一思路不靠谱+好好想!
毕竟面试或者机试想不出来也就跪了。
这个题,看了题解,发现还是双指针靠谱。
题目如下

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的爸爸就到这里了。

你可能感兴趣的:(跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode986.区间列表的交集)