974. 和可被 K 整除的子数组

Posted yonezu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
}

 

以上是关于974. 和可被 K 整除的子数组的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 974. 和可被 K 整除的子数组 !!!

[LeetCode] 974. 和可被 K 整除的子数组 !!!

⭐算法入门⭐《前缀和》中等02 —— LeetCode 974. 和可被 K 整除的子数组

数字总和可被 K 整除的子数组的数量

计算总和可被 k 整除的子序列总数

可被 k 整除的子数组数