974.和可被整除的子数组


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

难度中等80

给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。

示例:

输入:A = [4,5,0,-2,-3,1], K = 5
输出:7
解释:
有 7 个子数组满足其元素之和可被 K = 5 整除:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

提示:

  1. 1 <= A.length <= 30000
  2. -10000 <= A[i] <= 10000
  3. 2 <= K <= 10000

Imgur

class Solution {
    public int subarraysDivByK(int[] A, int K) {
        int n = A.length;
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0, 1);
        int sum = 0;
        int ret = 0;
        for (int i = 0; i < n; i++) {
            sum += A[i];
            int modulus = (sum % K + K) % K;
            if (map.containsKey(modulus)) {
                int temp = map.get(modulus);
                ret+=temp;
                map.put(modulus, temp + 1);
            } else {
                map.put(modulus, 1);
            }
        }
        return ret;
    }
}

文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 上一篇
面试题64.求1+2+…+n 面试题64.求1+2+…+n
面试题64. 求1+2+…+n求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例 1: 输入: n = 3 输出: 6 示例 2: 输
2020-06-02 anlen123
下一篇 
287.寻找重复数 287.寻找重复数
287. 寻找重复数难度中等597 给定一个包含 n + 1 个整数的数组 nums*,其数字都在 1 到 *n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3
2020-05-26 anlen123
  目录