前缀和,注意c++取模被除数为负数情况,要进行调整:
class Solution {
public:
int subarraysDivByK(vector<int>& A, int K) {
int out = 0;
unordered_map<int ,int> data;
data[0]=1;
int sum = 0;
for(size_t i=0;i<A.size();i++){
sum+=A[i];
int temp = (sum % K + K) % K;
if(data.find(temp)!=data.end()){
out = out + data[temp];
data[temp]++;
}else{
data[temp] = 1;
}
}
return out;
}
};