news 2026/11/6 3:37:05

DeepSeek LeetCode 525. 连续数组 Java实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek LeetCode 525. 连续数组 Java实现
importjava.util.HashMap;importjava.util.Map;classSolution{publicintfindMaxLength(int[]nums){// 前缀和(把 0 当作 -1,1 当作 +1) -> 第一次出现该前缀和的下标Map<Integer,Integer>map=newHashMap<>();// 前缀和为 0 的"虚拟位置"在 -1,用于处理从头开始的子数组map.put(0,-1);intsum=0;intmaxLen=0;for(inti=0;i<nums.length;i++){// 0 视为 -1,1 视为 +1sum+=(nums[i]==1)?1:-1;if(map.containsKey(sum)){// 相同前缀和之间的区间,0 和 1 数量相等maxLen=Math.max(maxLen,i-map.get(sum));}else{// 只记录第一次出现的位置,保证区间最长map.put(sum,i);}}returnmaxLen;}}

思路:把 0 变成 -1,转成"和为 0 的最长子数组"

要让某个子数组中 0 和 1 的数量相等,可以做一个等价转换:

· 把 0 看成 -1,1 看成 +1;
· 那么"0 和 1 数量相等"就等价于"该子数组的元素之和为 0"。

于是问题转成经典的 “求和为 0 的最长连续子数组”。

设 prefix[i] = nums[0] + … + nums[i-1](把 0 当 -1 之后的和)。
子数组 nums[j…i-1] 和为 0,即:

prefix[i] - prefix[j] = 0 ⟺ prefix[i] = prefix[j]

也就是说,两个位置的前缀和相等,它们之间的子数组就满足 0、1 数量相等。

因此:

  1. 用哈希表记录每个前缀和第一次出现的下标;
  2. 遍历数组,一边累加前缀和一边检查;
  3. 如果当前前缀和之前出现过,用 i - firstIndex 更新最长长度;
  4. 如果没出现过,记录当前下标(只记第一次,才能得到最长区间);
  5. 初始放入 {0: -1},用于处理从下标 0 开始的子数组。

细节

· 初始 {0: -1} 必不可少:例如 [0, 1] 整体合法时,到下标 1 前缀和回到 0,用 1 - (-1) = 2 得到正确长度。
· 只记录第一次出现:同一前缀和后续再出现时,区间长度只会更短,无需覆盖。
· 返回 0:如果没有合法子数组,maxLen 保持 0。

复杂度

· 时间复杂度:O(n),一次遍历;
· 空间复杂度:O(n),哈希表最多存储 n + 1 个不同前缀和。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/6 3:35:53

FDE是什么?普通人能学吗?一份可直接照着走的学习路线图

过去两年&#xff0c;围绕大模型出现了大量新概念&#xff1a;AI Agent、RAG、Vibe Coding、Context Engineering、MCP、AI Native&#xff0c;以及最近越来越频繁被提到的 FDE。很多人第一次看到 FDE&#xff0c;往往会经历两个阶段。第一阶段是兴奋。因为从海外大模型公司、A…

作者头像 李华
网站建设 2026/11/6 3:35:42

支持系统最多的远程控制软件:全平台兼容横评与推荐

一、你的设备"混搭"了吗&#xff1f;——多设备时代的远控困境2026年&#xff0c;普通人的设备矩阵长这样&#xff1a;&#x1f5a5; 办公室&#xff1a;Windows 台式机&#x1f4bb; 家里&#xff1a;MacBook / Windows 笔记本&#x1f4f1; 通勤&#xff1a;iPhone…

作者头像 李华
网站建设 2026/11/6 3:34:34

iloader 完整使用指南:免费一键把 SideStore 装进 iPhone

iloader 完整使用指南&#xff1a;免费一键把 SideStore 装进 iPhone 【免费下载链接】iloader User friendly sideloader 项目地址: https://gitcode.com/GitHub_Trending/iloa/iloader iloader 是一款免费的 iOS 侧载工具&#xff08;sideloading&#xff0c;把 App S…

作者头像 李华
网站建设 2026/11/6 3:33:34

高可用-Keepalived、综合实践:web 集群

高可用-Keepalived HA 集群能解决哪些问题&#xff1f; 当计划使用HA集群时候&#xff0c;有一个重要的问题需要回答&#xff1a;服务放到HA集群中&#xff0c;可用性是否会增加&#xff1f; 回答这个问题&#xff0c;需要弄清楚服务的能力和该服务的客户端如何配置。取决于解决…

作者头像 李华