974. Subarray Sums Divisible by K
题意:给你一个数组A和一个数K,求改数组有多少连续子序列的和能被K整除。
思路:简单DP。假设sum[i]表示[0-i]的求和,那么当出现i1<i2<i3,使得sum[i1]=sum[i2]=sum[i3],可以知道(i1,i2],(i2,i3],(i1,i3]满足上面要求。
class Solution {
public:
int subarraysDivByK(vector<int>& A, int K) {
int sum = 0;
int ans = 0;
vector<int> dp(10001,0);
for (int i = 0; i < A.size(); i++)
{
sum = ((sum + A[i]) % K + K)%K;
dp[sum]++;
ans += (sum==0?dp[sum]:dp[sum]-1);
}
return ans;
}
};