• 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;
  • 相关阅读:
    L1-031 到底是不是太胖了
    L1-030 一帮一
    PyCharm--git配置
    websocket--python
    UDP--python
    TCP--python
    pytest--metadata
    pytest--xdist
    pytest--夹具
    pytest--变量
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12974489.html
Copyright © 2020-2023  润新知