LeetCode0974

题目要求

算法分析

利用前缀和,只要统计前缀和之差可被K整除的子数组的个数即可,

根据同余定理,两个前缀和a和b,若满足a-b能够被K整除,那么整数a与b对模K同余,

于是可以根据同余的前缀和的数量,得到可被K整除的子数组数。

代码展示(C#)

public class Solution {
    Dictionary<int, int> dic = new Dictionary<int, int>();
    public int SubarraysDivByK(int[] A, int K)
    {
        int[] B = new int[A.Length+1];
        int temp = 0;
        B[0] = 0;
        dic.Add(0, 1);
        for (int i = 0; i < A.Length; i++)
        {
            B[i + 1] = B[i] + A[i];
            temp = B[i + 1] % K;
            if (temp < 0)
            {
                temp += K;
            }
            if (dic.ContainsKey(temp))
            {
                dic[temp]++;
            }
            else
            {
                dic.Add(temp, 1);
            }
        }
        int result = 0;
        foreach (var item in dic)
        {
            result += item.Value * (item.Value - 1) / 2;
        }
        return result;
    }
}

提交结果

猜你喜欢

转载自www.cnblogs.com/KingR/p/12973371.html