【滑动窗口】最长无重复子数组


求解代码

java 复制代码
public int maxLength(int[] arr) {
        // 记录「当前滑动窗口内」每个元素的出现次数
        HashMap<Integer, Integer> window = new HashMap<>();

        int left = 0, right = 0; // 滑动窗口双指针,「左闭右开」区间
        int valid = 0; // 记录最长无重复子数组的长度

        while (right < arr.length) {
            int c = arr[right]; // 即将加入窗口的当前元素
            right++; // 右指针右移,扩大窗口

            // 更新窗口内元素计数
            window.put(c, window.getOrDefault(c, 0) + 1);

            // 当【当前元素】在窗口内重复(次数>1),收缩左指针,直到窗口内无重复
            while (window.get(c) > 1) {
                int d = arr[left]; // 即将移出窗口的左指针元素
                left++; // 左指针右移,收缩窗口
                window.put(d, window.get(d) - 1); // 移出元素的计数-1
            }

            // 更新最长无重复窗口的长度
            valid = Math.max(valid, right - left);
        }
        // 返回最终的最长长度
        return valid;
    }
相关推荐
2301_81841901几秒前
C++中的协程编程
开发语言·c++·算法
add45a3 分钟前
C++中的工厂方法模式
开发语言·c++·算法
java1234_小锋3 分钟前
Java高频面试题:Spring-AOP通知和执行顺序?
java·开发语言·spring
番茄去哪了7 分钟前
Java基础面试题day02
java·开发语言·面向对象编程
xushichao198911 分钟前
C++中的工厂模式高级应用
开发语言·c++·算法
njsgcs11 分钟前
c# solidworks 折弯系数检查
开发语言·c#
SuperEugene15 分钟前
Vue3 + Element Plus 表格实战:批量操作、行内编辑、跨页选中逻辑统一|表单与表格规范篇
开发语言·前端·javascript
2501_9249526919 分钟前
C++模块化编程指南
开发语言·c++·算法
2401_8319207422 分钟前
基于C++的爬虫框架
开发语言·c++·算法
我是咸鱼不闲呀23 分钟前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论