最长无重复子数组
拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路
class Solution:
def maxLength(self, arr: list[int]) -> int:
if not arr:
return 0
i = 0
max_length = 0
j_last_position: dict[int, int] = {}
for j in range(len(arr)):
if arr[j] in j_last_position:
i = max(i, j_last_position[arr[j]] + 1)
j_last_position[arr[j]] = j
max_length = max(max_length, j - i + 1)
return max_length
if __name__ == '__main__':
arr = [1, 2, 3, 2, 1]
s = Solution()
print(s.maxLength(arr)) # 3
好比一快一慢两个人,他们都从数组起点开始,走的快的人,每走一步都会记录自己的位置,并且会先判断自己当前是否重复,如果重复,则让走的慢的人移动到:自己上一次出现位置的下一个和慢的人当前位置中的较大者处,保证快慢两人之间没有重复,同时更新最新的最大距离