当前位置: 首页 > news >正文

LeetCode—和为K的子数组(前缀和)

题目描述

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数

子数组是数组中元素的连续非空序列。

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

题目解析

这道题的描述很简单,也很好理解,目的就是让我们算出有多少个和为K的连续子数组。

因此最简单的一种方法就是暴力求解,找到所有的子数组,计算和是否为K。

但是,暴力求解虽然简单,但是时间消耗是很大的,时间复杂度是n的平方。所有在数组很大时计算得会很慢。

因此我们可以使用另外一种方式来求解此题,可以思考一下,题目中让求的说连续的子数组和,

请添加图片描述
这个其实可以转化成用前缀和的方式来表示。例如,求第3到5个数的和,就可以转化为前5个数的和减去前2个数的和,两个前缀和相减就可以来表示一个连续子数组的和。

img

借助官方题解中的一张图,在遍历结束后,会得到所有的前缀和及其出现的次数,在不断的遍历中pre-k会不断更新,在将其和前缀和去匹配,如果相等了count就加一。

用这种方法,只需遍历一次数组就可以实现,时间会大大减少。

代码如下:

    public int subarraySum(int[] nums, int k) {HashMap<Integer, Integer> map = new HashMap<>();map.put(0, 1);int pre = 0;int count = 0;for (int i = 0; i < nums.length; i++) {pre += nums[i];if (map.containsKey(pre - k)) {count += map.get(pre - k);}map.put(pre, map.getOrDefault(pre, 0) + 1);}return count;}

相关文章:

  • 在SpringBoot使用AOP防止接口重复提交
  • C# Bitmap类型与Byte[]类型相互转化详解与示例
  • 需求分析|泳道图 ProcessOn教学
  • Games101——光珊化——深度缓存——shading着色 1
  • 旷野之间3 – CTO 应具备的技能
  • 【ARMv8/v9 GIC 系列 5.1 -- GIC GICD_CTRL Enable 1 of N Wakeup Function】
  • 记一次mysql导出到达梦数据库
  • 8.5结构体嵌套结构体
  • ONNX加载模型问题总结
  • 筛斗数据:数据提取技术,驱动业务增长的新引擎
  • 人工智能+影像组学的交叉课题,患者的临床特征如何收集与整理|顶刊专题汇总·24-07-10
  • ChatGPT 5.0:一年后的猜想
  • 为何Expo成为React Native官方推荐框架?
  • 连续6年夺冠 6项细分领域第一,中电金信持续领跑中国银行业IT解决方案市场
  • python学习-类
  • github指令
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript创建对象的四种方式
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Linux CTF 逆向入门
  • Python socket服务器端、客户端传送信息
  • React 快速上手 - 07 前端路由 react-router
  • Redis的resp协议
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spark本地环境的搭建到运行第一个spark程序
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue.js框架原理浅析
  • VuePress 静态网站生成
  • windows-nginx-https-本地配置
  • 对象管理器(defineProperty)学习笔记
  • 解析带emoji和链接的聊天系统消息
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端之React实战:创建跨平台的项目架构
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 从如何停掉 Promise 链说起
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 回归生活:清理微信公众号
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # 数论-逆元
  • #define 用法
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C语言)逆序输出字符串
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Python第六天)文件处理
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十六)一篇文章学会Java的常用API
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)Mocha源码阅读: 项目结构及命令行启动