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

阳光市往房和城乡规划建设局网站韩国网站免费模板

阳光市往房和城乡规划建设局网站,韩国网站免费模板,网站建设南阳,Godaddy如何建设网站2845. 统计趣味子数组的数目 给你一个下标从 0 开始的整数数组 nums ,以及整数 modulo 和整数 k 。 请你找出并统计数组中 趣味子数组 的数目。 如果 子数组 nums[l…r] 满足下述条件,则称其为 趣味子数组 : 在范围 [l, r] 内,设 …

2845. 统计趣味子数组的数目

给你一个下标从 0 开始的整数数组 nums ,以及整数 modulo 和整数 k 。
请你找出并统计数组中 趣味子数组 的数目。
如果 子数组 nums[l…r] 满足下述条件,则称其为 趣味子数组 :
在范围 [l, r] 内,设 cnt 为满足 nums[i] % modulo == k 的索引 i 的数量。并且 cnt % modulo == k 。
以整数形式表示并返回趣味子数组的数目。
注意:子数组是数组中的一个连续非空的元素序列。
示例 1:
输入:nums = [3,2,4], modulo = 2, k = 1
输出:3
解释:在这个示例中,趣味子数组分别是:
子数组 nums[0…0] ,也就是 [3] 。
-在范围 [0, 0] 内,只存在 1 个下标 i = 0 满足 nums[i] % modulo == k 。
-因此 cnt = 1 ,且 cnt % modulo == k 。
子数组 nums[0…1] ,也就是 [3,2] 。
-在范围 [0, 1] 内,只存在 1 个下标 i = 0 满足 nums[i] % modulo == k 。
-因此 cnt = 1 ,且 cnt % modulo == k 。
子数组 nums[0…2] ,也就是 [3,2,4] 。
-在范围 [0, 2] 内,只存在 1 个下标 i = 0 满足 nums[i] % modulo == k 。
-因此 cnt = 1 ,且 cnt % modulo == k 。
可以证明不存在其他趣味子数组。因此,答案为 3 。
示例 2:
输入:nums = [3,1,9,6], modulo = 3, k = 0
输出:2
解释:在这个示例中,趣味子数组分别是:
子数组 nums[0…3] ,也就是 [3,1,9,6] 。
-在范围 [0, 3] 内,只存在 3 个下标 i = 0, 2, 3 满足 nums[i] % modulo == k 。
-因此 cnt = 3 ,且 cnt % modulo == k 。
子数组 nums[1…1] ,也就是 [1] 。
-在范围 [1, 1] 内,不存在下标满足 nums[i] % modulo == k 。
-因此 cnt = 0 ,且 cnt % modulo == k 。
可以证明不存在其他趣味子数组,因此答案为 2 。
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 109
1 <= modulo <= 109
0 <= k < modulo


题解

这道题的关键是转换趣味数组的条件

设 cnt 为满足 nums[i] % modulo == k 的索引 i 的数量。并且 cnt % modulo == k

注意到,对于 nums 中的数据,我们只关心其是否 %modulok
不妨令 nums 中 %modulo
k 的数据为 1,其余为 0
那么趣味数组的条件就转换为:子数组的和 % modulo == k

子数组的和很自然就是用前缀和记录
用数组 arr[ i ] 记录 nums 从 0 到 i 之和
任意边界为 [l,r] (l<=r) 的子数组之和即为:arr[r] - arr[l] + nums[l]
那么条件转换为:(arr[r] - arr[l] + nums[l]) % modulo == k

接下来就是对这个式子进行巧妙的转换

由于 k < modulo,则 k==k % modulo
(arr[r] - arr[l] + nums[l]) % modulo == k % modulo
arr[r] - arr[l] + nums[l] 与 k 同余

同余的相关内容可以看【国际数学竞赛】同余理论(Modulo)

根据同余的性质式子又可以转换为
(arr[r] - k) % modulo == (arr[l] - nums[l]) % modulo(移项)
这就是最终的式子
通过一大番功夫,我们将 r 和 l 移到了式子两边,这样我们就可以枚举 r ,用数组 s 不断记录并维护 r 自身即左边的所有 (arr[l] - nums[l]) % modulo 的个数。对于每一个 r ,满足条件的左边界个数即为 s[(arr[r] - k) % modulo]


代码如下↓

class Solution {
public:long long countInterestingSubarrays(vector<int>& nums, int modulo, int k) {vector<int> arr;//arr是前缀和int sum=0;for(int i=0;i<nums.size();i++){if(nums[i]%modulo==k){nums[i]=1;sum++;}else{nums[i]=0;}//转换成01,这样就变成统计 和 %mod 为 k 的子数组arr.push_back(sum);}//就是找 (arr[j] - arr[i]+nums[i]) % mod == k//等价于 (arr[j] - arr[i]+nums[i]) % mod == k%mod//同余//(arr[j] - k)%mod == (arr[i] - nums[i])% mod (i<=j)//这样就枚举j,统计左边有多少 arr[i] % mod 与之相等即可//(arr[i] - nums[i])% mod 可以一边枚举 j 一边维护,O(N)!int n=nums.size();vector<int> s(min(modulo,n+1));long long res=0;for(int i=0;i<arr.size();i++){int x=(arr[i] - k)%modulo;//哇,小心 arr[i]-k < 0if(x<0){s[(arr[i]-nums[i])%modulo]++;continue;}s[(arr[i]-nums[i])%modulo]++;res+=s[x];}return res;}
};
http://www.dtcms.com/a/584365.html

相关文章:

  • 公司自己做网站流程和备案做网站注册商标
  • 网站备案要营业执照吗wordpress 禁用评论
  • 自己开网站能赚钱吗长春网站建设网
  • wordpress vip system东莞网络优化专注乐云seo
  • 网站建设html代码优化如何删除网站死链
  • 上海网站建设兴策新媒体营销和网络营销的区别
  • 外部链接链轮的建设对于网站提h5网站制作平台有哪些
  • 中山低价网站建设专业定制网站开发
  • 怎么推广一个网站宝安网页
  • 北京论坛建站模板做淘宝代销哪个网站好
  • 旅游网站后台html模板建的网站打开很慢
  • 成都网站备案太慢帮别人做设计的网站
  • 广西建设工程质检安全网站如何替换网站
  • 做类图的网站免费的小程序
  • 如何做全球网站排名微网站怎么做的好名字
  • 山西省财政厅门户网站三基建设网络设计培训班
  • 58同城天门网站建设广东海外建设监理有限公司官方网站
  • 微信上的小说网站是怎么做的郑州模板网站
  • 三合一网站建设做第三方网站注意什么
  • 有没有做.net面试题的网站保障房建设网站首页
  • 重庆网站策划网站层级关系
  • 做音乐网站的栏目建设部网站招标投标文件
  • 网站建设费用摊销如何快速网站备案
  • 建设网站的技术方案是啥上海建设网站服务
  • 做一家网站费用吗怎么修改网站首页html代码
  • 网站建设怎么支付款项江门网站建设费用
  • 怎么看网站pr值做网站布为网
  • 网络营销导向型企业网站建设的原则网页设计网站怎么做
  • 安徽人防工程建设网站如何处理并发量大的购物网站
  • wordpress建站怎么上传手机软件开发是什么专业