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


求解代码

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;
    }
相关推荐
heimeiyingwang几秒前
【架构实战】数据脱敏与隐私保护:合规是底线
java·开发语言·架构
dengyuezhe806014 分钟前
《C++ 异常机制与智能指针:从原理到实现》
android·java·c++
于指尖飞舞15 分钟前
java后端面试题(常用集合极简)
java·开发语言·面试
我星期八休息26 分钟前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring
phltxy32 分钟前
Spring AI 智能咨询系统综合实战
java·人工智能·spring
稷下元歌33 分钟前
python核心基础,这关于基于Moveltg加 Ros2实战Python编程基础实课
开发语言·python
java1234_小锋35 分钟前
Spring Boot 中 Starter 是什么?它的核心规范有哪些?请说明如何自定义一个 Starter。
java·spring boot·后端
良枫35 分钟前
自进化 agent:核心模块一任务规划器 Planner
java·服务器·windows
AI人工智能+电脑小能手39 分钟前
【大白话说Java面试题 第114题】【并发篇】第14题:说一下悲观锁的优点和缺点?
java·开发语言·面试
盒马盒马41 分钟前
Rust:Vec
开发语言·rust