尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DeepSeek    LeetCode 523. 连续的子数组和 Java实现
LeetCode 523. 连续的子数组和Java思路前缀和 哈希表设 prefix[i] nums[0] … nums[i]。子数组 nums[i1…j] 的和为 k 的倍数等价于(prefix[j] - prefix[i]) % k 0 ⇔ prefix[j] % k prefix[i] % k因此只要两个下标 i j 的前缀和模 k 的余数相同且 j - i 2子数组长度至少为 2就返回 true。关键技巧· map 中只记录每个余数第一次出现的位置为了让区间尽可能长。· 初始化 map.put(0, -1)这样当下标 i 的余数为 0 时对应区间为 nums[0…i]长度 i - (-1) i 1方便统一判断。· 长度至少为 2 判断i - map.get(mod) 2。代码实现classSolution{publicbooleancheckSubarraySum(int[]nums,intk){// key: 前缀和 % k 的余数// value: 该余数第一次出现的下标MapInteger,IntegermapnewHashMap();map.put(0,-1);// 哨兵余数 0 在下标 -1 处出现过longprefix0;for(inti0;inums.length;i){prefixnums[i];intmod(int)(prefix%k);if(map.containsKey(mod)){// 要求子数组长度至少为 2if(i-map.get(mod)2){returntrue;}}else{map.put(mod,i);}}returnfalse;}}示例演示以 nums [23, 2, 4, 6, 7], k 6 为例i nums[i] prefix prefix % 6 map 状态 说明0 23 23 5 {0:-1, 5:0}1 2 25 1 {0:-1, 5:0, 1:1}2 4 29 5 5 已存在 i - map[5] 2 - 0 2 2 → 返回 true子数组 [2, 4] 和为 6是 6 的倍数。✅复杂度分析· 时间复杂度O(n)一次遍历哈希表操作均摊 O(1)。· 空间复杂度O(min(n, k))哈希表最多存 min(n, k) 个不同余数。易错点只存第一次出现的位置如果每次出现都覆盖可能把较长区间的起点覆盖掉导致结果错误。长度至少为 2即使发现余数相同也要检查 i - map.get(mod) 2否则 [k] 这样的单元素子数组会被误判k 本身是 k 的倍数但长度为 1。哨兵 map.put(0, -1)让「从下标 0 开始的子数组和是 k 的倍数」这种情况自然成立不需要特殊处理。溢出sum(nums) ≤ 2^31 - 1 时 int 也能放下但为了稳妥使用 long 累加前缀和。k 0 的边界LeetCode 约束 1 k 2^31 - 1但如果在其他平台遇到 k 0需要对 k 0 单独处理找是否存在长度 ≥ 2 且和为 0 的连续子数组因为 % 0 会抛 ArithmeticException。
RELATED

相关推荐

DeepSeek    LeetCode 528. 按权重随机选择 Java实现

DeepSeek LeetCode 528. 按权重随机选择 Java实现

LeetCode 528. 按权重随机选择(Java) 思路:前缀和 二分查找 把权重数组 w 展开成"区间": w [1, 3, 2] 前缀和 [1, 4, 6]下标 0 占区间 [0, 1) —— 长度 1 下标 1 占区间 [1, 4) —— 长度 3 下标 2 占区间 [4, …

📅 2026/11/6 8:53:48
DeepSeek    LeetCode 526. 优美的排列 Java实现

DeepSeek LeetCode 526. 优美的排列 Java实现

LeetCode 526. 优美的排列(Java) 题目要点 用 1 ~ n 构造排列 perm(下标从 1 开始),要求对每个位置 i: perm[i] % i 0 或 i % perm[i] 0返回满足条件的排列数量。方法一:回溯 剪枝 从位置 …

📅 2026/11/6 8:53:48
AI 眼镜 PCBA 代工怎么选:从 BOM 到首件的工艺核查清单

AI 眼镜 PCBA 代工怎么选:从 BOM 到首件的工艺核查清单

一句话结论:AI 眼镜的贴片不是"消费电子代工"的常规活,它更靠近高密度封装工艺。选厂比的不是报价,是工艺窗口和过程数据能不能摊开给你看。#mermaid-svg-YaPSQB8cLY1QmzlT{font-family:"trebuchet ms",verdana,arial,sa…

📅 2026/11/6 8:48:47
MORE NEWS

更多资讯

📰

Cline CLI完全指南:在终端运行AI编程代理,实现CI/CD自动化代码审查

人工智能大模型AI Agent代码智能体AI 应用开发工具 【免费下载链接】cline-chinese Cline中文汉化版,Cline是一款在您的 IDE 中运行的自主编程助手,经您许可后可以创建/编辑文件、运行命令、使用浏览器等功能。 项目地址: https://gitcode.co…

📰

Windows域控 设置全域的密码策略 【全域策略生效】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Spring+SpringMVC+MyBatis 整合(+拦截器) 详:

SpringSpringMVCMyBatis 整合(拦截器) 详: 目前为止博客基本已将掌握SpringMVC 相关的知识点; 终于来到了最终时刻 SSM 三大框架整合; 搭建SSM 框架的程序架构 SSM 框架整合其实就是:Mybatis Spring SpringMVC 的整合; 前面学习我们知道 &#xff1a…

📰

Oracle数据库基础学习

Oracle数据库基础学习 个人之前就学习过 mysql sqlserver 但笔记没有在CSDN上可能会有些跳跃~ 不明确地方可以看这位大佬的笔记~不是我的. Oracle 简介 OracleDatabase 又名Oracle RDBMS , 是甲骨文公司的一款关系数据库管理系统。(世界上最好的数据库系统;(历史悠…

📰

Java 面试

Java 面试宝典 不定时更新 Java的面试题, 有什么好的 感谢评论告知! 小提示 可以看旁边的文章目录, 自问自带看看自己会不会! 奉上本人Java学习笔记! Java 线程 泛型 集合 SSM Mybatis mybatis中namespace的作用 Namespace是命名空间…

📰

PowerShell监控——监控共享打印机 获取打印记录、打印人员、打印文件等详细信息

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬