题目:
代码:
class Solution {
public:
int subarraysDivByK(vector<int>& A, int K) {
int mem[K];
for(int i=0;i<K;i++) mem[i]=0;
A[0]=A[0]%K;
if(A[0]<0) A[0]+=K;
mem[A[0]]++;
for(int i=1;i<A.size();i++){
A[i]=A[i]+A[i-1];
A[i]=A[i]%K;
if(A[i]<0) A[i]+=K;
mem[A[i]]++;
}
int ans=mem[0]*(mem[0]+1)/2;//0比较特殊,不需要一对,单个也可
for(int i=1;i<K;i++) ans+=mem[i]*(mem[i]-1)/2;
return ans;
}
};
榜首代码:
class Solution {
public:
int subarraysDivByK(vector<int>& A, int K) {
int N = A.size();
if (N < 1 || K < 2) return 0;
int ans = 0;
int sums[N + 1];
int counts[K];
memset(sums, 0, sizeof(sums));
memset(counts, 0, sizeof(counts));
sums[0] = 0;
for (int i = 1; i < N + 1; ++i) {
sums[i] = sums[i - 1] + A[i - 1];
}
for (int i = 0; i < N + 1; ++i) {
counts[(sums[i] % K + K) % K]++;
}
for (int i = 0; i < K; ++i) {
if (counts[i] > 1) {
ans += counts[i] * (counts[i] - 1) / 2;
}
}
return ans;
}
};