给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。
示例:
输入:A = [4,5,0,-2,-3,1], K = 5输出:7解释:有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
提示:
1 <= A.length <= 30000-10000 <= A[i] <= 100002 <= K <= 10000
算法:哈希表。
class Solution {
public:
int subarraysDivByK(vector<
int>& A,
int k) {
unordered_map<
int,
int>
hash;
int s=
0,res=
0;
hash[0]=
1;
for(
int i=
0;i<A.size();i++
){
s=((s+A[i])%k+k)%
k;
if(hash.find(s)==hash.end())hash[s]=
0;
res+=
hash[s];
hash[s]++
;
}
return res;
}
};
转载于:https://www.cnblogs.com/programyang/p/11181293.html