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

给定一个整数数组 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 <= A.length <= 30000
-10000 <= A[i] <= 10000
2 <= K <= 10000

解题思路

开心地“我引我自己”,在【每日一题】Leetcode 560的题解中就有提到过前缀和的概念。遇见子数组这种,(反正我见得少)直接往前缀和上想。问题中涉及到整除的概念,需要运用到一个小小的数学知识:

a % b = c % b,则 (a - c) % b = 0

前缀和虽然取值范围很大,但是取模后的余数也就那么多。这样,相同余数的子数组之间取差就一定能被整除。比如,被5模后余3,已经记录的余数是3的前缀和有两个,那么现在的这个前缀和与前两个一一匹配,就能得到两组被整除的子数组满足条件。

再多一嘴,用于存余数键值对的哈希表一定要初始化0:1,因为假如前缀和正好是除数的整倍数,没有0:1对会造成这样的数组不满足条件。

(不需要复杂的想组合数的)代码如下:

class Solution:def subarraysDivByK(self, A: List[int], K: int) -> int:record = {0: 1}total, res = 0, 0for a in A:total += am = total % Ksame = record.get(m, 0)res += samerecord[m] = same + 1return res

(今天很快就写完了,开心)

【每日一题】Leetcode 974相关推荐

  1. 每日一题 -- LeetCode (十六)

    JavaScript / TypeScript for LeetCode 当前进程: 开始时间:2020.6.27 结束时间:undefined GitHub仓库:https://github.com ...

  2. 每日一题-leetcode 365. 水壶问题

    有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 targetCapacity 升. 如果可以得到 target ...

  3. 每日一题 leetcode 997. 找到小镇的法官 java

    class Solution {public int findJudge(int n, int[][] trust) {if(trust.length==0){if(n==1) return 1;el ...

  4. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  5. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  6. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  7. Leetcode 006. Z 字形变换 | 每日一题

    题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I ...

  8. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  9. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

最新文章

  1. JavaSist之ClassPool
  2. nginx反向代理tomcat时遇到一个问题
  3. LongestPalindromeSequence
  4. 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
  5. Java操作shell脚本
  6. 邮箱服务器怎么清理缓存,如何清除Outlook的附件缓存?
  7. Oracle DBA必须学会的11个Linux基本命令
  8. Php 取出session中的值,获取php值
  9. Java并发编程:线程的同步
  10. Unity 2D Skeletal Animation
  11. 应届毕业生如何打破面试焦虑
  12. maxdea如何计算指数_maxdea 5.0中文简体使用手册.pdf
  13. 微信扫一扫打印照片的原理以及实现过程(持续更新中)
  14. 拼多多百亿补贴商品详情数据抓取
  15. 最好的开源网络入侵检测工具(网址及版本已验证并更新)
  16. UVa12304(计算几何中圆的基本操作)
  17. 大连引入‘智慧路灯’助推‘智慧城区’建设,道路改造25基高杆灯
  18. 区块链学习笔记15——ETH状态树
  19. 实验一:JSP编程范例
  20. HTML实现领取QQ名片赞,易语言领取QQ名片赞

热门文章

  1. 【1.skynet网络剖析】
  2. 11月24号-11月30号
  3. 网易云音乐外链的真实地址下载方法
  4. Android — 创建文件及文件夹
  5. 石油大学计算机第三次在线作业,石油大学管理会计第三次在线作业答案
  6. 关闭数字健康 android 魅族,数字体验 篇二十八:精雕细刻,只为给魅友更好的选择,魅族16s Pro体验分享...
  7. 3.8-7.25 partB
  8. 流浪大师善始者众善终者寡_流浪者–适合每个开发人员的瑞士军刀
  9. 【云计算课程】Lecture 1 云计算概述
  10. msgpack-c 官方文档整理翻译之pack