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

在这里插入图片描述思路:同余+哈希表
同余定理:给定一个正整数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 处理这种情况。
因为:
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值