zoukankan      html  css  js  c++  java
  • leetcode 974 整除K的子数组

    从一个数组中,找出所有能整除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;
  • 相关阅读:
    vue 开发系列 企业微信整合
    MongoDB基础3
    MongoDB基础2
    MongoDB基础1
    SpringBoot MongoDB
    UWSGI
    Nginx
    编译python源码
    Flask部署
    Django个人工作总结
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12974489.html
Copyright © 2011-2022 走看看