[Leedcode][JAVA][第974题][和可被K整除的子数组][前缀和][HashSet]

【问题描述】[中等]

给定一个整数数组 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. 暴力(不通过)

时间复杂度:O(N^2) 空间复杂度:O(1)

      public int subarraysDivByK(int[] A, int K) {int n = A.length;int res = 0;for (int i = 0; i < n; ++i) {int sum = 0;for (int j = i; j < n; ++j) {if ((sum += A[j]) % K == 0) {++res;}}}return res;}
2. 前缀和 同余思想

转化为同余的思想
在这里插入图片描述

时间复杂度:O(N) 空间复杂度:O(N)

数组维护

 // 计算同余法// 用sum保存前n个数之和// 计算每个sum的余数,保存// 余数相同则可以整除 , 如// A = [4,5,0,-2,-3,1], K = 5// p[0] = 4, p[1] = 9, p[2] = 9, p[3] = 7, p[4] = 4, p[5] = 5// 余数对应 4,4,4,2,4,0;// 余数4有4个,排列组合法,计算4*3/2 = 6// 0余数相当于整除,用排列组合法(初始0赋值1), 2*1/2 = 1;// 最终答案为7public int subarraysDivByK(int[] A, int K) {int res = 0;// 记录当前前缀和int preSum = 0;// 因为K固定,因此可以使用数组代替哈希表(mod[i] = j,代表余数为i的前缀和出现了j次)int[] mod = new int[K];// 余数为0的状况,也就是直接被整除的情况,要提前放个1,考虑比如 A = {K}mod[0] = 1;for (int value : A) {// 更新前缀和preSum += value;// 计算mod(java注意)int m = (preSum % K + K) % K;// 更新结果res += mod[m];// 更新余数集记录++mod[m];}return res;}

HashSet

class Solution {public int subarraysDivByK(int[] A, int K) {Map<Integer, Integer> record = new HashMap<>();record.put(0, 1);int sum = 0, ans = 0;for (int elem: A) {sum += elem;// 注意 Java 取模的特殊性,当被除数为负数时取模结果为负数,需要纠正int modulus = (sum % K + K) % K;int same = record.getOrDefault(modulus, 0);ans += same;record.put(modulus, same + 1);}return ans;}
}

【总结】

1.取余问题
  • 对于任何同号的两个整数,其取余结果没有争议,所有语言的运算原则都是使商尽可能小。
  • 对于异号的两个整数,C++/Java语言的原则是使商尽可能大,很多新型语言和网页计算器的原则是使商尽可能小。
//被除数是负数
C++(G++ 编译): cout << (-7) % 3; // 输出 -1Java(1.6): System.out.println((-7) % 3); // 输出 -1Python 2.6:>>>  (-7) % 3 // 输出 2百度计算器:(-7) mod 3 = 2Google 计算器:(-7) mod 3 = 2
//除数是负数
C++(G++ 编译): cout << 7 % (-3); // 输出 1Java(1.6): System.out.println(7 % (-3)); // 输出 1Python 2.6:>>>  输出 -2百度计算器:7 mod (-3) = -2Google 计算器: 7 mod (-3) = -2】//被除数和除数同为负号
C++(G++ 编译): cout << (-7) % (-3); // 输出 -1Java(1.6): System.out.println((-7) % (-3)); // 输出 -1Python 2.6:>>>  输出 -1百度计算器:-7 mod (-3) = -1Google 计算器: -7 mod (-3) = -1
2. 前缀和 涉及到数组求和
3.数学是个好东西

转载链接:https://leetcode-cn.com/problems/subarray-sums-divisible-by-k/solution/guan-fang-ti-jie-tong-yu-fa-by-qi-xi-5/

参考链接:https://leetcode-cn.com/problems/subarray-sums-divisible-by-k/solution/he-ke-bei-k-zheng-chu-de-zi-shu-zu-by-leetcode-sol/
参考链接:http://ceeji.net/blog/mod-in-real/

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

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

相关文章

html:(7):了解hx标签和加强语气

了解<hx>标签&#xff0c;为你的网页添加标题 文章的段落用<p>标签&#xff0c;那么文章的标题用什么标签呢&#xff1f;在本节我们将使用<hx>标签来制作文章的标题。 标题标签一共有6个&#xff0c;h1、h2、h3、h4、h5、h6分别为一级标题、二级标题、三级标…

HDOJ-1257 最少拦截系统

最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 39448 Accepted Submission(s): 15465 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺…

计算机科学1pdf,计算机科学导论1.pdf

1.(4 分) 计算机的性能指标主要是( )。A. 操作系统、磁盘容量、内存容量、主频B. 字长、运算速度、存储容量、软硬件配置C. 运算速度、显示器分辨率、打印机的配置D. 配置语言、操作系统、外部设备、运算速度纠错得分&#xff1a; 4知识点&#xff1a; 5.1 计算机硬件(三大子系…

html:(8):span标签和q标签

使用<span>标签为文字设置单独样式 这一小节讲解<span>标签&#xff0c;我们对<em>、<strong>、<span>这三个标签进行一下总结&#xff1a; 1. <em>和<strong>标签是为了强调一段话中的关键字时使用&#xff0c;它们的语义是强调。…

cs20_1-1

1. 基本特点 1.1 save computation(惰性运行) x 2 y 3 add_op tf.add(x, y) mul_op tf.multiply(x, y) useless tf.multiply(x, add_op) pow_op tf.pow(add_op, mul_op) with tf.Session() as sess:z sess.run(pow_op) 如上&#xff0c;因为sess.run(pow_op)不需要用到u…

[剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet]

【问题描述】[数组中的重复数字][简单] 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的…

德国超级计算机中心,德国:强化人工智能能力建设 加大高性能计算网络投资...

图片来源&#xff1a;德国马克斯普朗克智能系统研究所德国2020年更新《国家人工智能战略》&#xff0c;在原先30亿欧元基础上再增加20亿欧元支持德国人工智能研究。德国科学联席会议决定投入1.33亿欧元&#xff0c;继续加强对人工智能能力中心和“高校教育的人工智能”进行资助…

HDU-3664-Permutation Counting

Permutation Counting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1739 Accepted Submission(s): 918 Problem Description Given a permutation a1, a2, … aN of {1, 2, …, N}, we define its E-val…

html:(9):blockquote引用和br换行

<blockquote>标签&#xff0c;长文本引用 <blockquote>的作用也是引用别人的文本。但它是对长文本的引用&#xff0c;如在文章中引入大段某知名作家的文字&#xff0c;这时需要这个标签。 等等&#xff0c;上一节<q>标签不是也是对文本的引用吗&#xff1f;不…

K3CLOUD数据权限授权

1.定义角色&#xff0c;把用户放入角色内 2.设置数据规则 3.设置业务对象功能授权 转载于:https://www.cnblogs.com/RogerLu/p/10370347.html

html:(10):添加空格和hr

为你的网页中添加一些空格 在上一节的例子&#xff0c;我们已经讲解过在html代码中输入空格、回车都是没有作用的。要想输入空格&#xff0c;必须写入 。 语法&#xff1a; 在html代码中输入空格是不起作用的&#xff0c;如下代码。 在浏览中显示&#xff0c;还是没有空格效果…

NYOJ82-迷宫寻宝1

迷宫寻宝&#xff08;一&#xff09; 时间限制&#xff1a; 1000 ms | 内存限制&#xff1a; 65535 KB 难度&#xff1a; 4 描述一个叫ACM的寻宝者找到了一个藏宝图&#xff0c;它根据藏宝图找到了一个迷宫&#xff0c;这是一个很特别的迷宫&#xff0c;迷宫里有N个编过…

[剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组]

【问题描述】[中等] 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。示例:现有矩阵 matrix …

微机计算机原理姚向华课后答案,微型计算机操作系统

1. 详尽剖析Mac OS X内部工作原理的具体细节。 2. 揭示Mac OS X及其组件的核心体系结构和实现。 3. 以一种面向实现的方法介绍Mac OS X系统。 4. 透彻解释Mac OS X的众多用户级和内核级IPC机制的工作原理&#xff0c;并且提供足够的知识和示例&#xff0c;可以满足各个层次的读…

node.js Error: connect EMFILE 或者 getaddrinfo ENOTFOUND

Error: getaddrinfo ENOTFOUND] code: ENOTFOUND, errno: ENOTFOUND, syscall: getaddrinfo Error: connect EMFILE 本人在中心服上向800多个ip上发请求&#xff0c;发两次就不行了出现如上报错。 原因是文件句柄不够用了&#xff0c;修改 ulimit 即可&#xff0c;步骤如下&am…

TokenFlow详解

https://github.com/omerbt/TokenFlow/issues/25 https://github.com/omerbt/TokenFlow/issues/31 https://github.com/omerbt/TokenFlow/issues/32 https://github.com/eps696/SDfu register_extended_attention_pnp1. 为所有BasicTransformerBlock layer的attn1重构forward2.…

html:(11):address和code标签

<address>标签&#xff0c;为网页加入地址信息 一般网页中会有一些网站的联系地址信息需要在网页中展示出来&#xff0c;这些联系地址信息如公司的地址就可以<address>标签。也可以定义一个地址&#xff08;比如电子邮件地址&#xff09;、签名或者文档的作者身份…

Java虚拟机(JVM)面试题大集合

Java虚拟机&#xff08;JVM&#xff09;Java内存区域说一下 JVM 的主要组成部分及其作用&#xff1f;说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别&#xff1f;队列和栈是什么&#xff1f;有什么区别&#xff1f;HotSpot虚拟机对象探秘对象的创建为对象分配内存处理…

从html到pug模板,将变量从html-webpack-plugin传递到pug模板

是否可以将变量传递给我之前在html-webpack-plugin中定义的pug-html-loader加载的.pug模板&#xff1f;webpack.config.babel.js...{test: /\.pug$/,use: [{loader: html-loader},{loader: pug-html-loader,options: {self: true}}]}...plugins: [new HtmlWebpackPlugin({chunk…

crossdomain.xml配置不当的利用和解决办法

00x1: 今天在无聊的日站中发现了一个flash小站&#xff0c;点进crossdomain.xml一看&#xff0c;震惊 本屌看到这个*就发觉事情不对 百度一下&#xff0c;这是一个老洞&#xff0c;配置不当能引起各种问题就算能远程加载恶意的swf文件&#xff0c;(swf是flash专用后缀文件常用于…