首页 > 编程语言 > 详细

leetcode 974 整除K的子数组

时间:2020-05-27 17:34:45      阅读:53      评论:0      收藏:0      [点我收藏+]

从一个数组中,找出所有能整除K的非空的连续的子数组。

这个很容易想到前缀和+哈希表优化。这里会用到一个同余定理:如果两个数对K取模余数相同,则两数之差可以整除K。

技术分享图片
public static int subarraysDivByK3(int[] A, int K) {
        int lenA = A.length;
        int[] pre = new int[lenA+1];
        //for(int i=0;i<lenA;i++){
        //    pre[i+1]=pre[i]+A[i];
        // }
        HashMap<Integer,Integer> record = new HashMap<>();
        record.put(0,1);
        int mod ;
        int ans = 0;
        int sum=0;
        for(int i=0;i<lenA;i++) {
            sum += A[i];
            mod = (sum % K + K) % K;
            if (record.containsKey(mod)) {
                ans += record.get(mod);
            }
            record.put(mod, record.getOrDefault(mod, 0) + 1);
        }
        return ans;
    }
View Code

还有就是对负数的取模运算。

mod = (sum % K + K) % K;

 

leetcode 974 整除K的子数组

原文:https://www.cnblogs.com/superxuezhazha/p/12974489.html

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