Leetcode-每日一题【剑指 Offer II 010. 和为 k 的子数组】
题目
给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。
示例 1:
输入:nums = [1,1,1], k = 2
输出: 2
解释: 此题 [1,1] 与 [1,1] 为两种不同的情况
示例 2:
输入:nums = [1,2,3], k = 3
输出: 2
提示:
- 1 <= nums.length <= 2 * 104
- 1000 <= nums[i] <= 1000
- 107 <= k <= 107
解题思路
前置知识
前缀和
前缀和:顾名思义,是要求前缀的总和,什么是前缀,对于一个存放数字的数组而言,前缀就是指的数组的前k项,因此对应的前缀和就是数组前k项的和。前缀和一般用来求数组中连续段子数组的值的和,类似于等差数列中利用等差数列的和来求某一段子数列的和:
举个例子:
我们有一个数组nums = [2,4,6,1,4]
下面我们来计算nums数组的前缀和数组arr,arr[i] = arr[i-1] + nums[i]
第一个元素由于没有前缀所以只能是nums[0],也就是2
第二个元素就等于arr[1] = arr[0] + nums[1]
![]()
![]()
![]()
我们得到的nums的前缀和数组就为 arr = [2,6,12,13,17]
作用:
那么我们得到这个前缀和数组到底有什么用呢?
有了前缀和数组我们就可以方便的计算出,一个数组的区间之内的和,例如我们要求出nums[2]~nums[4] 的和。
nums[2]~nums[4] =nums[2] + nums[3] +nums[4] = arr[4] - arr[1] = 11
可以直接用前缀和数组中的两个元素求出,不用再进行相加操作。这样可以有效的减少我们的重复计算。
代码为:public int[] prefix(int[] nums) {int[] prefix = new int[nums.length];prefix[0] = nums[0];for (int i = 1; i < nums.length; ++i) {prefix[i] = prefix[i - 1] + nums[i];}return prefix;}
1.题目要求我们找到该数组中和为 k 的连续子数组的个数,我们可以先计算出数组的前缀和。
2.然后我们利用两个for循环遍历整个原数组,枚举求出各个区间的和,若和等于k,则answer加一,注意这里,如果区间为[0,n]时,也就是左区间为0时,区间和[0,n] 就等于 arr[n],这个情况比较特殊所以我们要单独计算。最后返回answer即可。
代码实现
class Solution {public int subarraySum(int[] nums, int k) {int[] sum = new int[nums.length];sum[0] = nums[0];for(int i = 1; i < nums.length; i++){sum[i] = sum[i-1] + nums[i];}int answer = 0;for(int i = 0; i < nums.length; i++){if(sum[i] == k){answer++;}for(int j = i + 1; j < nums.length; j++){if( sum[j] - sum[i] == k){answer ++;}}}return answer;}
}
测试结果

相关文章:
Leetcode-每日一题【剑指 Offer II 010. 和为 k 的子数组】
题目 给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。 示例 1: 输入:nums [1,1,1], k 2输出: 2解释: 此题 [1,1] 与 [1,1] 为两种不同的情况 示例 2: 输入:nums [1,2,3], k 3输出: 2 提示: 1 < nums.leng…...
【JavaScript】使用Promise来处理异步调用,方法传入参数为接口,并回调接口的方法
例如我们在下面这个方法传入一个接口,并将方法的执行过程用传入的接口进行回调 connect() {wx.connectSocket({url: this.url,success: () > {console.log(WebSocket 连接创建成功);},fail: (err) > {console.error(WebSocket 连接创建失败, err);}});wx.onS…...
grid map学习笔记1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行
文章目录 0 引言1 安装依赖和编译1.1 安装依赖1.2 下载编译 2 运行示例2.1 simple_demo2.2 tutorial_demo2.3 iterators_demo2.4 image_to_gridmap_demo2.5 grid_map_to_image_demo2.6 opencv_demo2.7 resolution_change_demo2.8 filters_demo2.9 interpolation_demo 0 引言 苏…...
postgres wal2json插件jsonb字段数据丢失问题解决
使用pgwal2jsondebezium进行数据同步时,发现偶尔会有jsonb字段数据丢失的问题 进行测试时发现: 1、发生数据丢失的jsonb字段长度都比较大(超过toast阈值,使用toast表存储) 2、针对发生jsonb字段丢失的数据,jsonb字段本身未发生修…...
华为eNSP:路由引入
一、拓扑图 二、路由器的配置 1、配置路由器的IP AR1: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huaw…...
Retrospectives on the Embodied AI Workshop(嵌入式人工智能研讨会回顾) 论文阅读
论文信息 题目:Retrospectives on the Embodied AI Workshop 作者:Matt Deitke, Dhruv Batra, Yonatan Bisk 来源:arXiv 论文地址:https://arxiv.org/pdf/2210.06849 Abstract 我们的分析重点关注 CVPR Embodied AI Workshop 上…...
「JVM」Full GC和Minor GC、Major GC
Full GC和Minor GC、Major GC 一、Full GC1、什么是Full GC?2、什么情况下会触发full gc? 二、Minor GC1、什么是Minor GC?2、什么情况下会触发Minor GC? 三、Major GC1、什么是Major GC?2、什么情况下会触发Major GC?…...
Asp.Net MVC 使用Log4Net
Asp.Net MVC 使用Log4Net 在 ASP.NET MVC 中使用 Log4net 需要进行一些配置和代码集成。下面是在 ASP.NET MVC 中使用 Log4net 的步骤: 1. 安装 Log4net NuGet 包 打开 NuGet 包管理器控制台,并运行以下命令来安装 Log4net: Install-Pack…...
[元带你学: eMMC协议 29] eMMC 断电通知(PON) | 手机平板电脑断电通知
依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《元带你学:eMMC协议》 内容摘要 全文 2000 字, 主要内容 前言 断电通知是什么? 断电通知过程...
vue使用recorder-core.js实现录音功能
下载组件 npm install recorder-core封装方法 record.ts //必须引入的核心 import Recorder from recorder-core;//引入mp3格式支持文件;如果需要多个格式支持,把这些格式的编码引擎js文件放到后面统统引入进来即可 import recorder-core/src/engine/…...
ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量
在PHPenv安装的时候,环境变量默认的PHP版本是7.4的,MySQL的版本是5.7的,要想使用ThinkPHP8来开发,就必须修改环境变量,本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv,网站&…...
UE使用UnLua(二)
1.前言 最近也是比较忙,忘了来更新了,好多都是开了头断更的(狗头),今天抽空再更一篇!! 这篇讲一下在UnLua中覆盖蓝图事件(函数),及按钮、文本控件的一些使用…...
Appium+python自动化(二十五)-获取控件ID(超详解)
简介 在前边的第二十二篇文章里,已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置,那么还有没有其他方法来获取控件点击事件所需要的点击位置呢?答案是:Yes!因为在不同的大小屏幕的手机上获取控件的坐…...
SDWAN组网的九大应用场景
SD-WAN(软件定义广域网)是一种新兴的网络技术,它可以优化和管理企业广域网(WAN)的数据传输,提供更加高效、灵活和安全的网络连接。SD-WAN的出现极大地改变了传统WAN的组网方式,为企业提供了更多…...
el-date-picker时间范围只能选五分钟之内
el-date-picker时间范围只能选五分钟之内 一、主要代码 一、主要代码 <el-date-pickertype"datetime"size"small"value-format"yyyy-MM-dd HH:mm:ss"v-model"searchData.submitTimeCode":editable"false"placeholder&qu…...
大数据分析案例-基于LightGBM算法构建乳腺癌分类预测模型
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
Java中的io流
File文件类 1.访问文件名相关的方法 String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)。 String getPath():返回此File对象所对应的路径名。File getAbsoluteFile():返回此 File对象的绝对路径。 String getA…...
23 自定义控件
案例:组合Spin Box和Horizontal Slider实现联动 新建Qt设计师界面: 选择Widget: 选择类名(生成.h、.cpp、.ui文件) 在smallWidget.ui中使用Spin Box和Horizontal Slider控件 可以自定义数字区间: 在主窗口w…...
从原理到实践,分析 Redisson 分布式锁的实现方案(二)
上篇讲解了如何用 Redis 实现分布式锁的方案,它提供了简单的原语来实现基于Redis的分布式锁。然而,Redis作为分布式锁的实现方式也存在一些缺点。本文将引入Redisson来实现分布式锁。 一、Redisson是什么 Redisson是一个基于Redis的分布式Java框架。它提…...
QT【day3】
思维导图: 闹钟: //widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QTimer> #include<QTime> //时间类 #include<QPushButton> //按钮类头文件 #include<QDebug&…...
基于2D工程图几何特征与梯度提升模型的制造成本智能预测
1. 项目概述:从图纸到报价的智能革命在制造业,尤其是像汽车零部件这样的离散制造领域,报价速度直接决定了订单的生死。传统上,拿到一张新的2D工程图(DWG格式),成本工程师需要花上几天甚至几周时…...
本地柴油发电机组排行2023年最新榜单
柴油发电机是通过燃烧柴油驱动发动机,进而发电的设备,广泛应用于电力中断或无电网地区。1. 柴油发电机的核心工作原理是什么?柴油发电机是一种将化学能转化为电能的设备,其核心是柴油发动机与交流发电机的组合。当柴油在发动机内燃…...
【紧急预警】92%的DeepSeek测试用例生成失败源于这4个隐性配置缺陷——资深SDET连夜整理修复清单
更多请点击: https://codechina.net 第一章:DeepSeek测试用例生成的现状与危机本质 当前,DeepSeek系列大模型(如DeepSeek-Coder、DeepSeek-VL)在代码生成与理解任务中展现出强大能力,但其测试用例自动生成…...
别再死记硬背了!用5个生活化比喻彻底搞懂Linux进程的fork、exec和wait
别再死记硬背了!用5个生活化比喻彻底搞懂Linux进程的fork、exec和wait想象你正在厨房准备一顿大餐。菜谱上写着"切菜"、"炒菜"、"装盘"等步骤,但突然发现需要同时处理多道菜品——这时候,你会本能地让家人分工…...
基于ESP8266与MQTT的家庭水压自动控制系统设计与实现
1. 项目概述与核心需求解析家里水压不稳、供水时断时续,这大概是很多朋友都遇到过的烦心事。我所在的城市供水情况就很不理想,为了解决这个问题,我不得不自己动手,搭建了一套基于ESP8266微控制器的家庭水压增压与储水自动控制系统…...
C++ vector容器总结
vector基本概念功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间&a…...
用Python复现Nature论文:仅需100次循环数据,提前预测锂电池寿命(附完整代码与数据集)
用Python实战预测锂电池寿命:从数据特征到模型部署全解析锂电池作为现代能源存储的核心组件,其寿命预测一直是工业界和学术界关注的焦点。传统方法往往需要等待电池出现明显容量衰减才能进行判断,而最新研究表明,通过分析早期循环…...
接口测试用例设计:超详细防御体系与分层校验实践
1. 为什么“超详细”三个字在接口测试用例里不是修饰词,而是生死线我带过三支不同行业的测试团队——金融支付、SaaS中台、IoT设备管理平台。每次新人入职第一周,我都会收走他们写的前5条接口测试用例,逐行标红批注。不是因为格式不对&#x…...
基于Arduino与433MHz射频的智能灯光定时系统设计与实现
1. 项目概述:告别机械定时器,打造智能灯光管家家里前后院的照明,还有出门度假时屋内的几盏灯,过去一直靠四个老旧的机械定时器来管理。说实话,这玩意儿用起来真是费劲。它的核心问题在于“死板”——你设定好晚上7点开…...
正视孩童情绪波动,耐心陪伴平稳疏导
孩子的情绪就像夏天的天气,前一秒还晴空万里,后一秒可能就乌云密布。面对突如其来的哭闹、发脾气或者闷闷不乐,很多家长会急着“灭火”——要么讲道理,要么直接制止。但其实,情绪波动本身不是问题,它是孩子…...



第二个元素就等于arr[1] = arr[0] + nums[1]
