【算法题】Leetcode 974--和可被 K 整除的子数组--python实现

【算法题】Leetcode 974--和可被 K 整除的子数组--python实现_第1张图片思路:同余+哈希表
同余定理:给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,那么就称整数a与b对模m同余,记作a≡b(mod m)。

令 P[i] = A[0] + A[1] + … + A[i]。
那么,每个连续子数组的和 sum(i, j) 就可以写成 P[j] - P[i-1] 。
那么判断子数组的和能否被 K 整除就可以写成:
(P[j] - P[i-1])%K == 0
根据 同余定理 ,只要 P[j]%K== P[i-1]%K,就可以保证上面的式子成立。

然后,计算所有 P[i] %K的值,并用哈希表统计数量。然后利用
在这里插入图片描述
计算即可。
(n表示每种余数的数量)
特殊情况:
上面的算法没有考虑到 P[i] 本身就能被 K 整除,我们可以在数组 P 前面加一个 0 处理这种情况。
因为:
在这里插入图片描述

【算法题】Leetcode 974--和可被 K 整除的子数组--python实现_第2张图片

你可能感兴趣的:(算法题)