力扣2845.统计趣味子数组的数目
题目解析及思路
题目要求找出并统计数组中 趣味子数组 的数目
趣味子数组:在 [l, r]
内,设 cnt
为满足 nums[i] % modulo == k
的索引 i
的数量。并且 cnt % modulo == k
也就是说可以将满足条件的元素赋值为1,不满足为0,求前缀和
最终找到一段子数组和%m = k
-
同余
- 每次都写成ans += mp[s%mod],下意识认为余数相等
- 应该是ans += mp[(s-k+modulo)%modulo];
代码
class Solution {
public:
long long countInterestingSubarrays(vector<int>& nums, int modulo, int k) {
int n = nums.size();
long long s = 0,ans = 0;
unordered_map<int,int> mp;
mp[0] = 1;
for(int i=0;i<n;i++)
{
s += (nums[i]%modulo == k);
ans += mp[(s-k+modulo)%modulo];
mp[s%modulo] ++;
}
return ans;
}
};