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


求解代码

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;
    }
相关推荐
en.en..4 小时前
Linux mmap 内存映射深度解析:基于帧缓冲 /dev/fb0
java·服务器·前端
geovindu4 小时前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
洋不写bug4 小时前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
后台模板学习4 小时前
用 IM 即时聊天项目一次讲清消息去重算法的踩坑与解决方案
java·数据库·spring
秋名RG4 小时前
2026/6/15 系统故障复盘与整改方案
java·架构
今天要早睡_4 小时前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
南讯股份Nascent4 小时前
2026年CRM技术选型观察:当“数据打通“成为第一需求,电商CRM的架构价值在哪里
java·大数据·用户运营
心易行者4 小时前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
tedcloud1235 小时前
OpenLogi 怎么搭建?用 Rust 打造一个轻量的 Logitech 外设管理工具
linux·运维·服务器·开发语言·后端·rust·开源
霸道流氓气质5 小时前
Spring AI 技术细节:VectorStore 多库统一抽象
java·人工智能·spring