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


求解代码

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;
    }
相关推荐
2501_930707784 小时前
使用C#代码在 PowerPoint 中组合或取消组合形状
开发语言·c#
晚烛4 小时前
CANN 调试工具与性能剖析:从日志分析到 NPU 行为追踪的完整调试体系
开发语言·windows·python·深度学习·缓存
惊鸿一博5 小时前
图标加载方式_zeroIcon_是否加前缀mdi
开发语言·前端·javascript
王八八。5 小时前
linux后台java、postSQL部署命令
java·linux·运维
森G5 小时前
TypeScript 基础类型
开发语言·typescript
月落归舟5 小时前
MyBatis缓存机制
java·缓存·mybatis
huipeng9266 小时前
企业级微服务开发实战(一):项目启动与工程化设计
java·开发语言·spring boot·spring cloud·微服务·云原生·架构
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ6 小时前
java实现excel导入、下载模板方法
java·开发语言·excel
眠りたいです6 小时前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
段ヤシ.7 小时前
回顾Java知识点,面试题汇总Day12(持续更新)
java·mybatis