📜  最小的子数组,在重复时会给出原始数组(1)

📅  最后修改于: 2023-12-03 15:40:16.600000             🧑  作者: Mango

最小的子数组,在重复时会给出原始数组

题目描述

给定一个含有重复数字的数组,找到其中最小的子数组。

如果有多个子数组是最小的,则返回其中原始数组中靠前的。

示例

输入:[1, 2, 2, 3, 1]

输出:[2, 2]

解题思路

这道题和 209. 长度最小的子数组 很类似,差别在于有重复数字。

仍然可以用滑动窗口来解决这个问题,只需要把右指针往右移动时,找到首次出现的该数字即可。

代码实现
def find_subarray(nums):
    n = len(nums)
    left, right = 0, 0
    min_len = n
    res = []
    while right < n:
        right_num = nums[right]
        right += 1
        while right < n and nums[right] != right_num:
            right += 1
        if right - left < min_len:
            min_len = right - left
            res = nums[left:right]
        left += 1
    return res
复杂度分析
  • 时间复杂度:$O(n)$,其中 $n$ 是数组的长度。需要遍历数组寻找最小的子数组。
  • 空间复杂度:$O(1)$。需要常数的额外空间。