同余定理
使用前缀和+哈希表
由于可能是负数所以要进行修正:(sum%k+k)%k
class Solution {
public:
int subarraysDivByK(vector<int>& nums, int k) {
unordered_map<int,int> hash;
hash[0 % k] = 1; //0 这个数的余数
int sum = 0, ret = 0;
for(auto x : nums)
{
sum += x;
int r = (sum % k + k) % k;
if(hash.count(r)) ret += hash[r];
hash[r]++;
}
return ret;
}
};