和可被 K 整除的子数组
程序员文章站
2022-05-06 09:10:55
...
给定一个整数数组 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]
和 和为 K 的子数组 题目相似,不同的是计算key的时候,这个计算公式为
int key = (pre % K + K) % K;
public int subarraysDivByK(int[] A, int K) {
int n = A.length;
int res = 0;
int pre = 0;
Map<Integer, Integer> map = new HashMap<>();
map.put(0, 1);
for (int i = 0; i < n; i++) {
pre = pre + A[i];
int key = (pre % K + K) % K;
if (map.containsKey(key)) {
res = res + map.get(key);
}
map.put(key, map.getOrDefault(key, 0) + 1);
}
return res;
}
推荐阅读
-
程序员代码面试指南 python实现(第一章 栈和队列 :最大值减去最小值小于或等于num的子数组数量)
-
九章算法 | 拼多多面试题:和相同的二元子数组
-
1508 子数组和排序后的区间和(暴力)
-
求数组元素和是K的倍数的子串的最大长度
-
python求最大连续子数组的和
-
文件夹下(包含子文件夹和文件),取文件夹和子文件夹下所有后缀为JPG的文件的,路径和文件名 ,把路径和文件名放在数组中
-
[LeeCode 862. 和至少为 K 的最短子数组]单调栈
-
LeetCode 907. 子数组的最小值之和--单调栈+闭区间和开区间处理
-
LeetCode问题53:最大的连续子数组和
-
和可被 K 整除的子数组