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 即可---如果还想看其他语言的实现或有任何疑问欢迎继续提问

相关新闻

DDD CQRS架构和传统架构的优缺点比较

DDD CQRS架构和传统架构的优缺点比较

DDD CQRS架构和传统架构的优缺点比较 引言:架构演进的背景在软件开发领域,架构设计是决定系统可维护性、可扩展性和性能的关键因素。传统架构(如三层架构、MVC模式)长期占据主导地位,但随着业务复杂度的提升和分布式系…

2026/7/27 8:55:09 阅读更多 →
完整指南:如何使用开源工具BetterJoy在PC上使用Switch控制器

完整指南:如何使用开源工具BetterJoy在PC上使用Switch控制器

完整指南:如何使用开源工具BetterJoy在PC上使用Switch控制器 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcod…

2026/7/27 8:55:09 阅读更多 →
Ubuntu下libevent安装指南与常见问题解决

Ubuntu下libevent安装指南与常见问题解决

1. 项目概述与背景 libevent是一个轻量级的开源高性能网络库,广泛应用于事件驱动的网络编程中。它封装了操作系统底层的I/O复用机制(如epoll、kqueue等),为开发者提供了统一的编程接口。在Linux-Ubuntu环境下安装libevent看似简单…

2026/7/27 8:55:09 阅读更多 →

最新新闻

实在Agent:企业级智能自动化解决方案解析

实在Agent:企业级智能自动化解决方案解析

1. 实在Agent的企业级自动化能力概述 实在Agent作为新一代企业级智能自动化解决方案,其核心价值在于突破了传统RPA(机器人流程自动化)工具的局限性。传统RPA只能执行预设的固定流程,而实在Agent通过融合感知、决策与执行三大能力模…

2026/7/27 9:10:14 阅读更多 →
Engram架构:AI记忆与计算分离的革命性突破

Engram架构:AI记忆与计算分离的革命性突破

1. 从混沌到秩序:Engram架构与AI进化之路 在人工智能领域,我们正见证着一场静默的革命。2026年初,DeepSeek创始人梁文锋团队发表的Engram论文,犹如投入平静湖面的一颗石子,激起了关于AI架构本质的深层思考。这项研究直…

2026/7/27 9:10:14 阅读更多 →
深入解析Linux进程管理:从PCB到状态机

深入解析Linux进程管理:从PCB到状态机

1. 项目概述 Linux进程管理是操作系统最核心的功能之一,也是系统程序员必须掌握的底层知识。作为一名在Linux系统开发领域摸爬滚打多年的工程师,我经常遇到开发者对进程的理解停留在表面——知道fork()能创建新进程,却不清楚内核如何实现&…

2026/7/27 9:10:14 阅读更多 →
基于QtPy (PySide6) 的PLC-HMI工程项目(三)PLC上行数据的准备

基于QtPy (PySide6) 的PLC-HMI工程项目(三)PLC上行数据的准备

本次的通信对象是西门子S7-1500。一、新建数据类型打开博途,新建1500项目,CPU选1513-1PN,新建数据类型,命名为:AreaVar这个命名为AreaVar的数据类型,包含了数据分区(I/QM/DB)、DB编号、数据起点…

2026/7/27 9:10:14 阅读更多 →
全新夸父资源社复活,让大家都能找到想要的资源

全新夸父资源社复活,让大家都能找到想要的资源

夸克网盘已成为当前流行的网盘云存储服务之一,其功能全面,使用体验出色,支持在线解压和阅读,以及快速磁力离线下载,尤其适合IT从业者、学习者存储和检索技术资料、办公素材等内容。接下来,我将介绍几款适配…

2026/7/27 9:10:14 阅读更多 →
AI Agent 面试题 569:多Agent系统中的协作效率评估指标

AI Agent 面试题 569:多Agent系统中的协作效率评估指标

🔥 AI Agent 面试题 569:多Agent系统中的协作效率评估指标摘要:本文深入解析了「多Agent系统中的协作效率评估指标」这一 AI Agent 领域的核心面试题。文章从 群体智能 的基本概念出发,系统性地剖析了 协作效率、评估指标 等关键技…

2026/7/27 9:09:14 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻