假设你有两个数组,一个长一个短,短的元素均不相同。找到长数组中包含短数组所有的元素的最短子数组,其出现顺序无关紧要。

返回最短子数组的左端点和右端点,如有多个满足条件的子数组,返回左端点最小的一个。若不存在,返回空数组。

示例 1:

输入:
big = [7,5,9,0,2,1,3,5,7,9,1,1,5,8,8,9,7]
small = [1,5,9]
输出: [7,10]

示例 2:

输入:
big = [1,2,3]
small = [4]
输出: []

提示:

  • big.length <= 100000
  • 1 <= small.length <= 100000

Python 解答:
1.暴力法超时

class Solution:
    def shortestSeq(self, big: List[int], small: List[int]) -> List[int]:
        value = float('inf')
        aset = set(small)
        l, r = -1, -1
        for i in range(0, len(big)-len(small)+1):
            for j in range(i+len(small), len(big)+1):
                bset = set(big[i:j])
                if aset.issubset(bset) and j-i < value:
                    l, r = i, j-1
                    value = j-i
                    break
        if l == -1 and r == -1:
            return []
        else: 
            return [l, r]
最后修改日期: 2021年5月20日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。