当前位置: 首页 > news >正文

Day13(前缀和)——LeetCode2845.统计趣味子数组的数目

1 题目描述

  给定一个下标从0开始的数组nums,以及整数modulok。找出并统计数组中趣味子数组的数目:

  • 在范围[l,r]内,设cnt为满足nums[i]%modulo==k的索引i的数量,并且cnt%modulo==k
  • 子数组是数组中的一个连续非空的元素序列。

  其中一个示例如下:
1

2 题目分析及解决

  考虑[0,i]中满足nums[i]%modulo==k的下标i的数量,设为sum[i]。若[l,r]是一个趣味子数组,则(sum[r]-sum[l-1])%modulo==k,因此我们可以一边计算sum[i],一边寻找满足(sum[i]-sum[j])%modulo==kj的数量,将所有的j相加即可得到总的好子数组的数量。
  我们计算sum[i],需要找到i之前满足(sum[i]-sum[j])%modulo==ksum[j]的数量,因此我们需要把每个sum[i]%modulo出现的次数记录下来。而(sum[i]-sum[j])%modulo==k可以转化为sum[j]%modulo==(sum[i]-k)%modulo,又我们每次记录的sum[i]%modulo是正数,所以要保证(sum[i]-k)%modulo是正数,因此需要sum[i]-k+modulo保证其是正数。所以我们只需用哈希表记录下每个sum[i]%modulo出现的次数,然后当寻找以nums[i]结尾的趣味子数组时,只需找到之前出现过几个(sum[i]-k+modulo)%modulo即可。
  注意一个细节,因为sum[i]是记录的是[0,i]符合条件的下标个数,因此若有趣子数组包含nums[0],我们需要手动加一个头nums[-1]=0,因此需要初始化哈希表mp[0]=1。(若不进行初始化,sum[i]-sum[0][1,i],永远取不到nums[0])。为什么是初始化mp[0]=1,因为第一个不为0的sum[i],满足(sum[i]-k)%modulo==0,因此[j,i],0<=j<=i都是有趣子数组,而要想包含[0,i],就需要初始化mp[0]=1
  具体实现如下;

#include<unordered_map>
class Solution {
public:long long countInterestingSubarrays(vector<int>& nums, int modulo, int k) {int preSum=0,n=nums.size();long long ans=0;unordered_map<int,int> mp;mp[0]=1;for(int i=0;i<n;i++){//记录nums[i]及其之前满足nums[j]%m==k的数量preSum+=(nums[i]%modulo==k);ans+=mp[(preSum-k+modulo)%modulo];mp[preSum%modulo]++;}return ans;}
};

3 总结

  初始化的细节很容易让人头晕,本人解释的也不是很好,建议读者结合具体例子推导一下。

http://www.xdnf.cn/news/159553.html

相关文章:

  • 计蒜客4月训练赛-普及 T3
  • 运维面试情景题:如果有一块新的硬盘要加入机架如何配置;如果新加了一台服务器,如何配置安全措施
  • 【开源】基于51单片机的简易智能楼道照明设计
  • C语言-函数练习1
  • arcpy列表函数的应用
  • 软件测评中心如何保障软件质量与安全性?
  • autodl(linux)环境下载git-lfs等工具及使用
  • .NET8 依赖注入组件
  • Nacos 集群节点是如何管理的?节点加入和退出的流程是怎样的?
  • 免费送源码:Java+ssm+HTML 三分糖——甜品店网站设计与实现 计算机毕业设计原创定制
  • 2025春季NC:3.1TheTrapeziumRule
  • 哈希表的线性探测C语言实现
  • 嵌入式学习笔记 - HAL_xxx_MspInit(xxx);函数
  • 生成式AI全栈入侵:当GPT-4开始自动编写你的Next.js路由时,人类开发者该如何重新定义存在价值?
  • 梯度下降法
  • MySQL 调优
  • 使用 IntersectionObserver 实现懒加载提升网页性能的高效方案
  • Make + OpenOCD 完成STM32构建+烧录
  • [论文解析]Mip-Splatting: Alias-free 3D Gaussian Splatting
  • 探索 AI 在文化遗产保护中的新使命:数字化修复与传承
  • Unity中文件上传以及下载,获取下载文件大小的解决方案
  • 1--Python基础课程实验指导书
  • Postman脚本处理各种数据的变量
  • 常见的六种大语言模型微调框架
  • Go设计模式-观察者模式
  • html初识
  • 求解,如何控制三相无刷电机?欢迎到访评论
  • 【家政平台开发(81)】让家政服务“绿”起来:平台绿色环保服务推广指南
  • 【Castle-X机器人】五、物联网模块配置与调试
  • 【源码+文档+调试讲解】基于springboot的健身房管理系统