【前缀和+哈希】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

相关推荐
一条大祥脚3 小时前
26.1.26 扫描线+数论|因子反演+子序列计数|树套树优化最短路
数据结构·算法
m0_561359673 小时前
基于C++的机器学习库开发
开发语言·c++·算法
星空露珠4 小时前
速算24点所有题库公式
开发语言·数据库·算法·游戏·lua
2401_832402754 小时前
C++中的类型擦除技术
开发语言·c++·算法
努力学习的小廉4 小时前
我爱学算法之—— 递归回溯综合(二)
开发语言·算法
sheji52614 小时前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
2301_763472464 小时前
C++网络编程(Boost.Asio)
开发语言·c++·算法
依依yyy4 小时前
沪深300指数收益率波动性分析与预测——基于ARMA-GARCH模型
人工智能·算法·机器学习
hcnaisd24 小时前
深入理解C++内存模型
开发语言·c++·算法