第51天(中等题 数据结构)
打卡第五十一天
2道中等题

题目:

思路:前缀和+哈希表,同余定理
代码:
int subarraysDivByK(vector<int>& nums, int k) {
unordered_map<int,int> cnt; // 哈希表
int ans = 0, s = 0; // 答案计数、当前前缀和余数
for(int x : nums){
cnt[s]++; // 当前余数的出现次数
s = (s + x % k + k) % k; // 更新余数(+k处理负数情况)
ans += cnt[s]; // 计数
}
return ans;
}
题目:

思路:

代码:
long long beautifulSubarrays(vector<int>& nums) {
unordered_map<int,int> cnt; // 哈希表
int mask = 0; // 当前前缀异或值
long long ans = 0;
cnt[0] = 1; // 初始化空子数组的异或为0
for(int x : nums){
mask ^= x; // 更新前缀异或值
ans += cnt[mask]++; // 加上之前出现相同值的次数,当前值出现次数+1
}
return ans;
}
耗时≈一小时 明天继续

浙公网安备 33010602011771号