[python 刷题] 974 Subarray Sums Divisible by K

[python 刷题] 974 Subarray Sums Divisible by K

题目如下:

Given an integer array nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k.

A subarray is a contiguous part of an array.

依旧是 prefix sum 的变种题,基础技巧,即使用 hashmap 去保存 prefix sum 的这个特性与 [JavaScript 刷题] 哈希表 - 和为 K 的子数组, leetcode 560 的核心技巧一致,不过这里保存的并不是当前的前缀和,而是余数。

其利用的特性是当出现两个以上,余数为一样的子数组,自然代表着中间的前缀和为可被 k k k 所整除

以题目 [4,5,0,-2,-3,1] 为例,遍历过程如下:

  1. 在这里插入图片描述
  2. 在这里插入图片描述
  3. 在这里插入图片描述

以余数为 4 的例子来说,它其实可以视作穷举所有余数为 4 所可能存在的组合:

在这里插入图片描述

这也对应的存在的这几个结果:

4 -> 5 对应 [5]

4 -> 0 对应 [5, 0]

4 -> -3 对应 [5, 0, -2, -3]

5 -> -3 对应 [0, -2, -3]

0 -> -3 对应 [-2, -3]

可以看到,数组中余数为 4 出现了 4 次,其组合可以呗写为 3 + 2 + 1 3 + 2 + 1 3+2+1,将 4 视作 n n n 的话,也就是 n + ( n − 1 ) + ( n − 2 ) + . . . + 2 + 1 n + (n - 1) + (n - 2) + ... + 2 + 1 n+(n1)+(n2)+...+2+1,最终可以被简化为 n ( n − 1 ) 2 \frac{n(n - 1)}{2} 2n(n1)

随后再加上子数组和为 0 0 0,也就是数组的和本身就可以被 k 所整除的个数,最终就能够得到结果

python 代码如下:

class Solution:def subarraysDivByK(self, nums: List[int], k: int) -> int:remainders = Counter(map(lambda x: x % k, accumulate(nums)))ans = 0for r in remainders:# combinations of prefixes have same remainer mod kans += remainders[r] * (remainders[r]-1) // 2ans += remainders[0]return ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174347.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端环境的安装 Node npm yarn

一 node npm 1.下载NodeJS安装包 下载地址:Download | Node.js 2.开始安装 打开安装包后,一直Next即可。当然,建议还是修改一下安装位置,NodeJS默认安装位置为 C:\Program Files 3.验证是否安装成功 打开DOS命令界面&#…

Flutter——最详细(Scaffold)使用教程

Scaffold简介 相当于界面的主体(类似于安卓最外层PhoneWindow),组件的展示都必须依附于它。 使用场景: 每一个界面都是脚手架,通过它来进行架构实现,优美的布局效果。 属性作用appBar顶部的标题栏body显示整…

需要下微信视频号视频的小伙伴们看过来~

随着视频号的热度越来越大,下载视频号视频的需求也开始增加啦,今天给大家给分享几个简单实用的下载方法,总有一个你能用上的! 一、犀牛视频下载 犀牛视频下载器可以直接解析并下载视频号短视频。您只需转发视频到机器人即可下载。…

Typora 最新激活方法

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,其目标是实现易读易写。而Typora则是一个非常不错的Markdown编辑器,它的界面非常的简洁直观,并且功能各…

搭建MyBatis

文章目录 1.创建Maven 工程创建MyBatis的核心配置文件创建mapper接口创建MyBatis的映射文件通过junit测试功能加入log4j日志功能核心配置文件详解1.这里实现了jdbc.properties jdbc.properties文件 默认的类型别名MyBatis的增删改查 1.创建Maven 工程 打包方式:jar…

基于SSM的乐器购物网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

更新电脑显卡驱动的操作方法有哪些?

更新显卡驱动可以有效的提升我们电脑的性能,可以通过设备管理器、显卡驱动软件等方式进行检查驱动是否需要更新,并修复一些电脑上已知的显卡问题。 然而,对于一些不是很懂电脑技术的人员来说,更新电脑显卡驱动是一件比较复杂和混乱…

手把手教你如何轻松播放附件中的视频——面向初学者的实践指引

前言 在日常使用办公系统的过程中,经常被问到一个问题,就是附件中如果上传的是视频文件,如何在网页上播放?虽然可以下载后再在本地播放,但是有时候只是想看一下视频里其中的一段,下载后再播放就非常的浪费…

中科驭数受邀亮相两场重要行业盛会,摘得2023“璀璨技术奖”奖项

近日,中科驭数作为DPU算力基础设施领军企业,受邀参与2023信息技术应用创新专题研讨会暨第二届集成电路产业发展创新大会、以及2023AI网络创新大会。在两大行业盛会上,中科驭数与行业知名专家和企业代表齐聚一堂,分享了DPU在集成电…

栈队列OJ练习题(C语言版)

目录 一、括号匹配问题 思路: 完整版C语言代码: 讲解: 二、用队列实现栈 思路: 完整版C语言代码: 讲解: 三、用栈实现队列 思路: 完整版C语言代码: 讲解&#xff1a…

中科驭数亮相2023中国移动全球合作伙伴大会

10月11-13日,2023中国移动全球合作伙伴大会开幕。中科驭数作为移动云COCA生态合作伙伴,受邀出席“算网融百业数智赢未来”政企分论坛,高级副总裁张宇上台参与移动云OpenCOCA开源项目和《OpenCOCA白皮书》的重磅发布仪式,助力构建未…

蓝凌EIS智慧协同平台saveImg接口存在任意文件上传漏洞

蓝凌EIS智慧协同平台saveImg接口存在任意文件上传漏洞 一、蓝凌EIS简介二、漏洞描述三、影响版本四、fofa查询语句五、漏洞复现六、深度复现1、发送如花2、哥斯拉直连 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者…

linux驱动开发-点亮第一个led灯

linux驱动开发-点亮第一个led灯 一.背景知识二.如何写驱动程序三.实战演练3.1 查询原理图3.2 配置引脚为gpio模式3.3 配置引脚为输出模式3.4 DR寄存器 四.代码实例4.1 驱动层4.2 应用层 一.背景知识 我们这里使用的是百问网的imx_6ullpro的开发板。这里和裸机不同的是&#xf…

一文搞懂Linux线程和进程区别?

1.什么是线程? 线程其实就是轻量级进程(LWP)。 轻量级进程(Light Weight Process)是指在操作系统级别上,将一个进程划分为多个执行单元,每个执行单元拥有自己的堆栈、程序计数器和资源使用情况…

VScode 自定义主题各参数解析

参考链接: vscode自定义颜色时各个参数的作用(史上最全)vscode编辑器,自己喜欢的颜色 由于 VScode 搜索高亮是在是太不起眼了,根本看不到此时选中到哪个搜索匹配了,所以对此进行了配置,具体想增加更多可配置项可参考…

Wmware虚拟机网络配置

Wmware虚拟机网络配置 这几天我在家里电脑安装虚拟机打算学习一下集群配置,出现了一些问题。现在想把它记录下来,如果能给看到的人一些帮助,那就更好了。 1、桥接模式的配置 这个时候 我们的虚拟机就是桥接模式上网了。这时候可能会出现不能…

华泰证券:新奥能源:零售气待恢复,泛能与智家仍是亮点

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,由于新奥能源(02688)发布三季度经营数据: 1-3Q23:天然气零售量yoy-4.7%,燃气批发量yoy17.6%,综合能源销量yoy34.2%&#xff…

大数据之LibrA数据库系统告警处理(ALM-12002 HA资源异常)

告警解释 HA软件周期性检测Manager的WebService浮动IP地址和数据库。当HA软件检测到浮动IP地址或数据库异常时,产生该告警。 当HA检测到浮动IP地址或数据库正常后,告警恢复。 告警属性 告警参数 对系统的影响 如果Manager的WebService浮动IP地址异常…

Flink CDC 2.0 主要是借鉴 DBLog 算法

DBLog 算法原理 DBLog 这个算法的原理分成两个部分,第一部分是分 chunk,第二部分是读 chunk。分 chunk 就是把一张表分为多个 chunk(桶/片)。我可以把这些 chunk 分发给不同的并发的 task 去做。例如:有 reader1 和 re…

IDEA 如何运行 SpringBoot 项目

步骤一:配置 Maven 第一步:用 IDEA 打开项目,准备配置 maven 环境 ,当然如果本地没有提前配置好 maven,就用 IDEA 默认的配置即可 配置 maven 步骤 情况 1:如果本地没有配置过 maven,可以保持如…