首页 > 其他 > 详细

LeetCode0974

时间:2020-05-27 15:41:32      阅读:30      评论:0      收藏:0      [点我收藏+]

题目要求

技术分享图片

 

算法分析

利用前缀和,只要统计前缀和之差可被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;
    }
}

 

提交结果

技术分享图片

 

LeetCode0974

原文:https://www.cnblogs.com/KingR/p/12973371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!