Leetcode 974 和可被K整除的子数组

题目:

解法

//前缀和算法+hash表
class Solution {
public:
    int subarraysDivByK(vector<int>&amp; A, int K) {
        int res=0;
        int sum=0;
        unordered_map<int,int> hash = {{0,1}};//考虑自身被整除的情况,神操作,合并了自身被整除和不被整除两种情况
        for(int num:A){
            sum += num;
            int module = (sum % K + K) % K;//C++的模运算会出现负数,改成正数
            if(hash.count(module)){ //count会统计module出现的个数,但是map中不存在重复,因此即是判断是否存在这个值
                res += hash[module];//存数量
            }
            hash[module] ++;//更新hash表
        }
        return res;
    }
};
原文地址:https://www.cnblogs.com/molinchn/p/13228028.html