最长无重复子数组
描述:
给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组
代码
下面展示我的代码和注释。
class Solution:
def maxLength(self , arr ):
if len(arr) <= 1:
return len(arr)
max_sub_length = 0 # 结果
record = dict() # 使用字典,记录已经访问过的元素与下标
sub_start = 0 # 子串开始位置
i = 0
while i < len(arr):
while i < len(arr) and arr[i] not in record:
record[arr[i]] = i # 记录数组元素及其位置
i += 1
if i < len(arr): # 找到重复元素
if record[arr[i]] >= sub_start: # 重复元素所在位置大于等于子串开始位置
max_sub_length = max(max_sub_length, i - sub_start) # 取大的
sub_start = record[arr[i]] + 1 # 更新子串开始位置
record[arr[i]] = i # 更新arr[i]记录
i += 1
return max(max_sub_length, len(arr)-sub_start) # 别忘了最后一次比较