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;
  • 相关阅读:
    SQL——BETWEEN操作符
    SQL——IN操作符
    SQL——LIKE操作符
    SQL——ORDER BY关键字
    SQL——AND、OR运算符
    顺序执行
    流程控制
    集合类型
    字典类型
    字典 in 操作符
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12974489.html
Copyright © 2011-2022 走看看