LeetCode第523题 - 连续的子数组和

题目

给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。

示例 1:

输入: [23,2,4,6,7], k = 6
输出: True
解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。
示例 2:

输入: [23,2,6,4,7], k = 6
输出: True
解释: [23,2,6,4,7]是大小为 5 的子数组,并且和为 42。
说明:

数组的长度不会超过10,000。
你可以认为所有数字总和在 32 位有符号整数范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/continuous-subarray-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

class Solution {public boolean checkSubarraySum(int[] nums, int k) {if (nums == null || nums.length < 2) {return false;}k = Math.abs(k);if (k == 1) {return true;}int zLength = nums.length - 1;for (int i = 1; i < zLength; ++i) {if (nums[i] == 0 && nums[i + 1] ==0) {return true;}}int length = nums.length;int[][] sums = new int[length][length];int iLength = nums.length;sums[0][0] += mod(nums[0], k);for (int i = 1; i < iLength; ++i) {int jLength = i + 1;if (i == iLength) {jLength = iLength;}for (int j = 0; j < jLength; ++j) {sums[j][i] += mod(mod(nums[i], k) + sums[j][i - 1], k);if (i == j) {continue;}if (sums[j][i] == 0) {return true;}}}return false;}public int mod(int value, int k) {if (value == 0) {return 0;}if (value == k) {return 0;}if (k == 0) {return value;}if (value > k) {return value % k;}return value;}
}

要点
有如下关键点:

  • k有可能为负数。
  • 由于求余运算占用资源比较高,因此需要依据求余运算的特点,自定义一个方法,提高效率。当然运算效率的问题,这里存疑。
  • 需要对求余运算有一定的了解,比如
    • 0对任意k求余,余数均为0。因此连续的两个0,符合本题目的要求。
    • 非零整数对0求余时,运算时报除0异常。
    • mod(A+B) = mod(mod(A) + mod(B)),利用本公式,可以提升运算效率,节省一定的时间。

发表一点个人的看法,这道题的示例2的说明有点小问题,[2, 6, 4]是大小为3的子数组,并且和为12,恰好满足要求。

准备的用例,如下

	@Testpublic void test01() {int[] nums = new int[] { 23, 2, 4, 6, 7 };int k = 6;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test0101() {int[] nums = new int[] { 1, 2, 5, 6, 8 };int k = 6;assertFalse(new L523().checkSubarraySum(nums, k));}@Testpublic void test02() {int[] nums = new int[] { 23, 2, 6, 4, 7 };int k = 6;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test03() {int[] nums = new int[] { 21, 2, 5, 4, 10 };int k = 6;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test0301() {int[] nums = new int[] { 21, 2, 5, 4, 7 };int k = 6;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test0302() {int[] nums = new int[] { 21, 2, 5, 4, 3 };int k = 6;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test0303() {int[] nums = new int[] { 21, 2, 5, 4, 2 };int k = 6;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test0304() {int[] nums = new int[] { 21, 2, 5, 4, 6 };int k = 6;assertFalse(new L523().checkSubarraySum(nums, k));}@Testpublic void test04() {int[] nums = new int[] { 23, 2, 4, 6, 7 };int k = -6;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test05() {int[] nums = new int[] { 0,0 };int k = 0;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test06() {int[] nums = new int[] { 23, 2, 4, 6, 7 };int k = 0;assertFalse(new L523().checkSubarraySum(nums, k));}@Testpublic void test0601() {int[] nums = new int[] { 23, 0, 4, 0, 7 };int k = 0;assertFalse(new L523().checkSubarraySum(nums, k));}@Testpublic void test0602() {int[] nums = new int[] { 23, 0, 0, 2, 7 };int k = 0;assertTrue(new L523().checkSubarraySum(nums, k));}@Testpublic void test07() {int[] nums = new int[] { 3,8,8,9,2,5,2,0,0,1,8,9,3,5,7,5,3,2,2,8,6,6 };int k = 750;assertTrue(new L523().checkSubarraySum(nums, k));}

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

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

相关文章

什么是防抖和节流?有什么区别?如何实现?

文章目录 一、是什么定义代码实现节流防抖 二、区别三、应用场景 一、是什么 本质上是优化高频率执行代码的一种手段 如&#xff1a;浏览器的 resize、scroll、keypress、mousemove 等事件在触发时&#xff0c;会不断地调用绑定在事件上的回调函数&#xff0c;极大地浪费资源…

gitee 轻量级pr怎么操作

Gitee 轻量级 PR&#xff08;Gitee Pull Request Lite&#xff09;是一种无须 Fork 仓库&#xff0c;即可快速向某个特定仓库创建并提交一个合并请求&#xff08;Pull Request&#xff09;的功能。只需在 Web 端完成代码贡献&#xff0c;就能一键向开源仓库提出 PR 请求&#x…

与供应商无关的 SOAR 在克服孤立的安全挑战中的作用

孤立安全是指不同的安全工具和流程独立运行&#xff0c;它们之间没有有效的通信或数据共享的情况。这种分散的方法在许多组织中很常见&#xff0c;通常是由于随着时间的推移逐渐采用安全解决方案&#xff0c;每个解决方案都根据其特定功能进行选择&#xff0c;而不考虑整体集成…

大模型-迭代优化文本概括

迭代优化 在编写 Prompt 以使用 LLM 开发应用程序时&#xff0c;首先要有关于要完成的任务的想法&#xff0c;可以尝试编写第一个 Prompt&#xff0c;满足上一章说过的两个原则&#xff1a;清晰明确&#xff0c;并且给系统足够的时间思考。然后运行它并查看结果。如果第一次效…

【hcie-cloud】【23】容器编排【k8s】【Kubernetes常用工作负载、Kubernetes调度器简介、Helm简介、缩略词】【下】

文章目录 单机容器面临的问题、Kubernetes介绍与安装、Kubernetes对象的基本操作、Kubernetes YAML文件编写基础Kubernetes常用工作负载Kubernetes常用工作负载简介创建一个无状态nginx集群无状态工作负载Deployment说明无状态工作负载Deployment常见操作创建一个有状态的MySQL…

04 Redis之命令(Hash型Value命令+List型Value命令+Set型Value命令+有序集合ZSET型Value命令)

3.4 Hash型Value命令 Hash 表就是一个映射表 Map&#xff0c;也是由键-值对构成&#xff0c;为了与整体的 key 进行区分&#xff0c;这里的键称为 field&#xff0c;值称为 value。注意&#xff0c;Redis 的 Hash 表中的 field-value 对均为 String 类型。 3.4.1 hset  格…

第一个hello驱动

Linux驱动程序的分类 字符设备驱动、块设备驱动和网络设备驱动。 Linux驱动程序运行方式 把驱动程序编译进内核里面&#xff0c;这样内核启动后就会自动运行驱动程序了&#xff1b;把驱动程序编译成以.ko为后缀的模块文件&#xff0c;然后在Linux启动后&#xff0c;我们自己…

微信小程序(二十一)css变量-定义页面主题色

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.使用css变量 2.消除按钮白块影响 3.修改图标样式 源码&#xff1a; npmTest.json {"navigationStyle": "custom","usingComponents": {//引入vant组件"van-nav-bar"…

Pg分区表配置与实现

数据库加速查询的方法&#xff0c;包括添加索引&#xff0c;调整数据库引擎的参数&#xff0c;将日志目录放单独的磁盘分区等。实际应用中&#xff0c;历史数据会随着时间推移逐渐增多&#xff0c;且重要性逐渐降低&#xff0c;但又不能轻易删除。此时可考虑将该表按某个时间字…

[libwebsockets]lighttpd+libwebsockets支持ws和wss配置方法说明

libwebsockets介绍 libwebsockets是一款轻量级用来开发服务器和客户端的C库。它不仅支持ws,wss还同时支持http与https,可以轻轻松松结合openssl等库来实现ssl加密。 官方参考链接: https://libwebsockets.org/ lighttpd版本 lighttpd/1.4.59 (ssl) - a light and fast w…

Linux多线程——线程池

本章Gitee仓库&#xff1a;线程池、单例模式 文章目录 1. 池化技术简述2. 线程池3. 单例模式3.1 单例模式特点3.2 饿汉方式和懒汉方式3.3 单例模式线程安全 1. 池化技术简述 C中的STL&#xff0c;当空间不够时&#xff0c;会自动扩容&#xff0c;这个并不是我们需要多少&#…

sqli-labs闯关

目录 1.安装靶场2.了解几个sql常用知识2.1联合查询union用法2.2MySQL中的通配符&#xff1a;2.3常用函数2.4数据分组 3.mysql中重要的数据库和表4.开始闯关4.1 Less-14.1.1 首先进行一次常规的注入4.1.2 深入解析 1.安装靶场 1.首先推荐使用github下载靶场源码 https://githu…

Matlab处理excel数据

我们新建个excel文档&#xff0c;用Matlab读取里面的内容&#xff0c;计算和判断里面的计算结果是否正确&#xff0c;并打印到另一个文档当中。 新建文档 新建输入文档&#xff0c;文件名TestExcel 编写脚本 [num,txt] xlsread(TestExcel.xlsx); SNcode num(:,1);%从序号中…

《微信小程序开发从入门到实战》学习九十六

7.2 基础内容组件 7.2.4 progress组件 progress组件的示例代码如下&#xff1a; <progress percent"20" show-info /> 7.3 表单组件 表单组件是用于收集信息的组件。第三章介绍了许多表单组件&#xff0c;包括form、input、textarea、picker、switch、butt…

【数据分析】numpy基础第五天

文章目录 前言Z-Score标准化Z-Score应用示例 Min-Max归一化Min-Max应用示例 总结 前言 第五天是我们的numpy学习计划中的最后一天。 在数据处理和数据分析中&#xff0c;数据预处理是非常重要的一步。我们不可能完全靠肉眼来分析数据&#xff0c;总会有用到各种算法模型的时候…

eclipse启动Java服务及注意事项

1、导入项目 选择file——》import…——》Generate——》Exiting Projects into Workspace——》选择要导入的项目 2、添加tomcat 1&#xff09;点击Serves——》No servers are available. Click this link to create a new server… 2&#xff09;点击“Add…” 3&…

YOLO 全面回顾:从最初的YOLOv1到最新的YOLOv8、YOLO-NAS,以及整合了 Transformers 的 YOLO

YOLO 全面回顾 综述评估指标YOLO v1YOLO v2YOLO v3YOLO v4YOLOv5 与 Scaled-YOLOv4 YOLORYOLOXYOLOv6YOLOv7DAMO-YOLOYOLOv8PP-YOLO, PP-YOLOv2, and PP-YOLOEYOLO-NASYOLO with Transformers 综述 论文&#xff1a;https://arxiv.org/pdf/2304.00501.pdf 代码&#xff1a;gi…

MySQL知识点总结(一)——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推

MySQL知识点总结&#xff08;一&#xff09;——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推 一条SQL的执行过程索引底层数据结构为什么不使用二叉树&#xff1f;为什么不使用红黑树?为什么不使用hash表&#xff1f;为什么不使用…

Windows Qt C++ VTK 绘制三维曲线

Qt 自带数据可视化从文档上看&#xff0c;只能实现三维曲面。 QwtPlot3D在Qt6.6.0上没编译通过。 QCustomPlot 只能搞二维。 VTK~搞起。抄官网demo。 后续需求&#xff1a; 1、对数轴 2、Y轴逆序 3、Z轴值给色带&#xff0c;类似等高线图的色带 期待各位大佬多多指导。…

ad18学习笔记十六:v割

所谓“V割”是印刷电路板&#xff08;PCB&#xff09;厂商依据客户的图纸要求&#xff0c;事先在PCB的特定位置用转盘刀具切割好的一条条分割线&#xff0c;其目的是为了方便后续SMT电路板组装完成后的分板之用&#xff0c;因为其切割后的外型看起来就像个英文的“V”字型&…