【前缀和+哈希】LCR_011_连续数组

求解代码

java 复制代码
public int findMaxLength(int[] nums) {

        int ans = 0;
        int sum = 0;

        HashMap<Integer,Integer> hMap = new HashMap<>();

        hMap.put(0, -1);

        for(int i=0;i<nums.length;i++){
            sum+=(nums[i]==0?-1:1);

            if(hMap.containsKey(sum)){
                ans=Math.max(ans, i-hMap.get(sum));
            }else{
                hMap.put(sum, i);
            }
        }
        return ans;
    }

小贴士

这道题关键在于把0转为-11保持1,将问题转化为"找和为0的最长子数组"。

解释一下这行代码:

bash 复制代码
map.put(0, -1);

假设从数组起始位置(下标 0)到下标 i 的前缀和为 0,说明 [0, i] 区间内 01 数量相等,此时子数组长度就是 i - (-1) = i + 1

相关推荐
NashSKY20 分钟前
EM 算法完整推导与本质剖析
算法·机器学习·概率论
foundbug99932 分钟前
MATLAB实现:基于图像对比度和波段相关性的高光谱波段选择算法
开发语言·算法·matlab
嘿嘿嘿x336 分钟前
Linux-实践
linux·运维·算法
Godspeed Zhao1 小时前
从零开始学AI14——最大似然估计与对数损失函数
算法·逻辑回归·最大似然
流年如夢1 小时前
排序算法详解
数据结构·算法·排序算法
会编程的土豆1 小时前
Go 语言中的 `new` 关键字(创建指针)
java·算法·golang
南宫萧幕1 小时前
HEV能量管理建模实战:从零搭建 Simulink 物理环境到 Python(DQN) 强化学习联合仿真调通
开发语言·python·算法·matlab·汽车·控制
x_yeyue2 小时前
2026第十七届蓝桥杯c++B组省赛题解
笔记·算法·蓝桥杯·acm·题解
handler012 小时前
【C++ 算法竞赛基础】数论篇:核心公式、经典例题与高频模板
开发语言·c++·算法·蓝桥杯·数论·最大公约数·最小公倍数