Skip to content

Latest commit

 

History

History
108 lines (77 loc) · 3.58 KB

File metadata and controls

108 lines (77 loc) · 3.58 KB

最长无重复子数组

last modify

最长无重复子数组_牛客题霸_牛客网

问题简述
给定一个长度为n的数组arr, 返回arr的最长无重复元素子数组的长度, 无重复指的是所有数字都不相同.
子数组是连续的, 比如[1,3,5,7,9]的子数组有[1,3], [3,5,7]等等, 但是[1,3,7]不是子数组
思路: 滑动窗口
  • 标准的滑动窗口模板问题;
Python
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

算法笔记

其他算法笔记

相关问题

滑动窗口 (7)

[中等, LeetCode] 找到字符串中所有字母异位词 🔥
[中等, LeetCode] 无重复字符的最长子串 🔥

[困难, LeetCode] 最小覆盖子串 🔥
[困难, 剑指Offer] 滑动窗口的最大值
[困难, 牛客] 数组中的最长连续子序列
[困难, 牛客] 最小覆盖子串 🔥

[简单, 牛客] 压缩字符串(一)