题解 | 最长无重复子数组
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
经典滑动窗口
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param arr int整型一维数组 the array
# @return int整型
#
class Solution:
def maxLength(self , arr: List[int]) -> int:
# 用于存储当前窗口中已经出现过的元素
seen = set()
# 左指针,用于表示滑动窗口的左边界
left = 0
# 记录最长无重复元素子数组的长度
max_len = 0
# 右指针,用于遍历数组
for right in range(len(arr)):
# 当右指针指向的元素已经在 seen 集合中时,需要移动左指针
while arr[right] in seen:
# 从 seen 集合中移除左指针指向的元素
seen.remove(arr[left])
# 左指针右移
left += 1
# 将右指针指向的元素添加到 seen 集合中
seen.add(arr[right])
# 计算当前窗口的长度
current_len = right - left + 1
# 更新最长无重复元素子数组的长度
max_len = max(max_len, current_len)
return max_len
查看1道真题和解析