最长无重复子数组
Last updated
Last updated
问题简述
给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组
思路:滑动窗口
标准的滑动窗口模板问题;
class Solution:
def maxLength(self , arr: List[int]) -> int:
if not arr: return 0
N = len(arr)
l, r = 0, 0 # [l, r] 滑动窗口闭区间
ret = 1
book = set()
while r < N:
# 当不满足条件时,循环移动左边界直到再次满足
while arr[r] in book: # 注意这里判断的是 arr[r]
book.remove(arr[l]) # 这里移除的是 arr[l]
l += 1
ret = max(ret, r - l + 1) # 更新结果
book.add(arr[r])
r += 1
return ret