📅  最后修改于: 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