首页/新闻资讯/正文详情

DeepSeek LeetCode 3729. 统计有序数组中可被 K 整除的子数组数量 JavaScript实现

发布时间:2026/9/26 22:32:07 来源:云帆数科 栏目:资讯中心
DeepSeek    LeetCode 3729. 统计有序数组中可被 K 整除的子数组数量 JavaScript实现
LeetCode 3729. 统计有序数组中可被 K 整除的子数组数量核心思路本题的关键在于去重两个子数组只要数值序列相同就视为同一个。由于数组有序重复的子数组只能由连续相同的元素构成。两步策略1. 统计全部含重复用前缀和 哈希表统计所有和能被 k 整除的子数组2. 减去重复计数对每段连续相同元素减去重复统计的子数组数量---解法一直接枚举易理解ACjavascript/*** param {number[]} nums* param {number} k* return {number}*/var numGoodSubarrays function(nums, k) {// Step 1: 统计所有子数组含重复let ans 0;let prefix 0;const map new Map();map.set(0, 1);for (let x of nums) {prefix ((prefix x) % k k) % k; // 处理负数const count map.get(prefix) || 0;ans count;map.set(prefix, count 1);}// Step 2: 减去重复统计let i 0;const n nums.length;while (i n) {let j i 1;while (j n nums[j] nums[i]) j;const m j - i; // 连续相同元素个数const val nums[i];// 枚举所有可能的子数组长度for (let len 1; len m; len) {// 如果该长度组成的子数组和能被 k 整除if ((len * val) % k 0) {// 该长度有 (m - len 1) 个子数组但在 step1 中统计了 m - len 1 次// 只需要保留 1 个所以要减去 m - lenans - (m - len);}}i j;}return ans;};---解法二数学优化推荐利用 step k / gcd(k, v) 跳跃枚举避免遍历所有长度javascript/*** param {number[]} nums* param {number} k* return {number}*/var numGoodSubarrays function(nums, k) {// 特判k1 时所有子数组都满足不同子数组数量 nif (k 1) return nums.length;// Step 1: 统计所有子数组含重复let ans 0;let prefix 0;const map new Map();map.set(0, 1);for (let x of nums) {prefix ((prefix x) % k k) % k;const count map.get(prefix) || 0;ans count;map.set(prefix, count 1);}// Step 2: 减去重复统计const n nums.length;let i 0;while (i n) {let j i 1;while (j n nums[j] nums[i]) j;const m j - i; // 连续相同元素个数const val nums[i];// 数学优化只需要枚举能被 k 整除的长度// 步长 step k / gcd(k, val)const step k / gcd(k, Math.abs(val));// 从 step 开始每次增加 step直到 mfor (let len step; len m; len step) {ans - (m - len);}i j;}return ans;};// 最大公约数辅助函数function gcd(a, b) {a Math.abs(a);b Math.abs(b);while (b ! 0) {[a, b] [b, a % b];}return a;}---详细示例javascript// 示例 1console.log(numGoodSubarrays([4,5,0,-2,-3,1], 5));// 输出7// 解释所有子数组和为 5 的倍数去重后有 7 个// 示例 2console.log(numGoodSubarrays([1,1,1,1], 2));// 输出4// 解释和为偶数的不同子数组[1,1], [1,1,1,1], 长度为2的段有2个但相同只算1个// 示例 3console.log(numGoodSubarrays([0,0,0,0], 3));// 输出4// 解释[0], [0,0], [0,0,0], [0,0,0,0] 共4个不同子数组---复杂度分析解法 时间复杂度 空间复杂度解法一 O(n Σm) 最坏 O(n²) O(n)解法二 O(n Σ(m/step)) 最坏 O(n²) O(n)---关键细节1. 前缀和取模((prefix x) % k k) % k 确保余数非负2. 去重逻辑· 对于长度为 m 的连续相同段长度为 len 的子数组有 (m - len 1) 个· 步骤1统计了全部我们只需要保留 1 个所以减去 (m - len)3. 数学优化· len * val % k 0 等价于 len 是 k / gcd(k, val) 的倍数· 只用枚举 len step, 2*step, 3*step, ...4. 边界情况· val 0 时gcd(k, 0) kstep 1所有长度都要去重· k 1 时直接返回 nums.length 即可---如果还想看其他语言的实现或有任何疑问欢迎继续提问

相关推荐

怎么用AI做excel表格 AI导出鸭来救场
怎么用AI做excel表格 AI导出鸭来救场

关键词:智能表格处理、AI数据清洗、多格式导出、跨平台办公、自动化报告生成 引言:当海量Excel数据需要整理导出时,人工操作效率低、易出错,格式混乱问题频发。AI技术的介入让表格处理从“手工劳动”进化为“智能生成”&#xff0… · 2026/9/20 2:30:10

Linux文件系统与假根(Chroot)技术深度解析
Linux文件系统与假根(Chroot)技术深度解析

1. Linux文件系统基础解析 在Linux系统编程中,文件系统是最基础也最核心的组成部分之一。与Windows系统不同,Linux将所有设备、资源都抽象为文件进行管理,这种"一切皆文件"的设计哲学使得文件系统操作成为系统编程的必备技能。 Li… · 2026/9/20 15:25:22

大模型推理性能优化:三维框架与实战策略
大模型推理性能优化:三维框架与实战策略

1. 大模型推理性能优化全景认知在大模型应用落地的过程中,推理性能直接决定了用户体验和运营成本。作为AI基础设施的核心环节,推理框架的性能优化需要建立系统化的分析视角。我结合多个工业级项目实践经验,梳理出性能优化的三维分析框架&… · 2026/9/18 7:02:04

公选课网页制作与网站建设避坑指南:3个关键指标保上线
公选课网页制作与网站建设避坑指南:3个关键指标保上线

公选课网页制作与网站建设避坑指南:3个关键指标保上线 网站刚上线三天,后台突然弹出红色警告:你的页面被注入了博彩广告代码,浏览器地址栏显示“不安全”。这种时刻,很多初学者甚至部分开发者都手足无措。别慌,这不仅是技术故障,更是安全架构缺失的必… · 2026/9/26 22:31:56

国外jquery网站哪家好?改需求拖一周的坑我全填了
国外jquery网站哪家好?改需求拖一周的坑我全填了

国外jquery网站哪家好?改需求拖一周的坑我全填了 改个需求建站公司拖一周,这种痛谁懂?钱都交了,改个按钮颜色要等三天,改个交互逻辑要排期两周。这时候你才会真心想问,做 国外jquery网站哪家好… · 2026/9/26 22:31:44

ab173:面向开发者的语义感知型JSON协作工作流
ab173:面向开发者的语义感知型JSON协作工作流

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

人大金仓KingbaseES在银河麒麟下的适配实践与避坑指南
人大金仓KingbaseES在银河麒麟下的适配实践与避坑指南

简介:面向国产化数据库适配需求,这份资源配置人大金仓(KingbaseES)环境下的 Java 配套文件,适合正在做信创迁移、数据库国产化替换的开发者参考。资源共4个文件,含 zip 打包文件、txt 说明文档与 SQL 脚本&… · 2026/9/26 22:31:31

电子商务网站建设与维护方法从零搭建
电子商务网站建设与维护方法从零搭建

电商网站建设与维护方法:避开这5个设计坑,响应不再拖一周 改个需求建站公司拖一周,这种痛苦谁懂?很多电商老板发现,网站上线容易维护难,稍微动个布局,页面就乱套,开发说“改这里影响那里”,最后干脆不改了。这时候你才意识到,… · 2026/9/26 22:31:31

桌面通讯CRM部署实战:从软电话配置到客户管理自动化
桌面通讯CRM部署实战:从软电话配置到客户管理自动化

1. 为什么一个“桌面型通讯CRM”值得单独部署很多人一听到 CRM,第一反应就是“上个网页版 SaaS 就够了,登录就能用,何必装桌面客户端”。这个想法我理解,但真正跑过电话销售团队、客服中心,或者做过外呼量大的业务时&a… · 2026/9/26 22:31:31

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

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

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码