zoukankan      html  css  js  c++  java
  • 974. 和可被 K 整除的子数组

     方法一:不用统计前缀和,只需要统计前i个数的余数就可以,若之前和的余数和当前和的余数相等则子数组可以整除K,遍历一遍即可

    class Solution {
        public int subarraysDivByK(int[] A, int k) {
            int n = A.length;   
            Map<Integer,Integer> map = new HashMap<>();
            map.put(0,1);  // 本身即可整除K的情况
            int sum = 0, res = 0;
            for(int i = 0; i < n; i++) {
                sum += A[i];
                int yu = (sum % k + k) % k; // 防止出现余数为负的情况
                res += map.getOrDefault(yu,0);
                map.put(yu,map.getOrDefault(yu,0)+1);
            }
            return res;
        }
    }

    数组优化:

    class Solution {
        public int subarraysDivByK(int[] A, int k) {
            int n = A.length;   
            int[] arr = new int[10000];
            arr[0] = 1;  // 本身即可整除K的情况
            int sum = 0, res = 0;
            for(int i = 0; i < n; i++) {
                sum += A[i];
                int yu = (sum % k + k) % k; // 防止出现余数为负数的情况
                res += arr[yu];
                arr[yu]++;
            }
            return res;
        }
    }
  • 相关阅读:
    作业三3
    作业三2(改过)
    第一章
    实验2
    第三章
    例2-11
    例2-10
    例2-8
    例2-9
    例2-7
  • 原文地址:https://www.cnblogs.com/yonezu/p/13307684.html
Copyright © 2011-2022 走看看