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

【leetcode复健-8】560. 和为 K 的子数组-前缀和思想+哈希表

560. 和为 K 的子数组 - 力扣(LeetCode)

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 2 * 104
  • -1000 <= nums[i] <= 1000
  • -107 <= k <= 107

坑点与要点

我们首先理清楚题目要求:
1. 找nums中连续子数组,和为k
2. 返回子数组个数

相信大多数人都会通过看示例来快速理解题目,但这题需要额外关注的是,示例所给出的数组都是有序的,而我们实际接收到的数组是无序的,一定不能被示例所误导
这题的正确题解很巧妙,使用前缀和的思想,将前缀和保存在一张哈希表中,此后我们只需要关注哈希表中有多少个的前缀之和与当前数组前缀之和的差能够等于k即可,如此这道题就转换成了与1. 两数之和 - 力扣(LeetCode)同类型的题目。

正确思路

两个前缀和之差确定一个数组。

使用一张哈希表 hash1 来记录当前所有前缀(键为数值前缀和,值对应的前缀和个数),cnt 记录满足和为 k 的子数组个数,变量 prefix (前缀和)从数组起始点开始不断累加,每次循环将当前的前缀和个数 +1 ,并计算 seen = k - prefix ,seen 代表当前前缀数组要到达 k 所需要的前缀和,在 hash1 中查询所需要的前缀和个数,将其累加到 cnt 中。
如此即可找出所有符合要求的子数组个数

代码如下

class Solution: def subarraySum(self, nums: List[int], k: int) -> int: hash1 = {} hash1[0] = 1 prefix = 0 seen = 0 cnt = 0 for i in nums: prefix += i seen = prefix - k if seen in hash1: cnt += hash1[seen] if prefix in hash1: hash1[prefix] += 1 else: hash1[prefix] = 1 return cnt

精华思路

以后遇到连续的字符串/数组这类题目,不仅可以考虑双指针,也可以考虑使用前缀和思想尝试等价替代

http://www.cnnetsun.cn/news/4039811.html

相关文章:

  • Ubuntu Ollama 搭建私有大模型部署 垂直投喂RAG
  • 【leetcode复健-9】239. 滑动窗口最大值-滑动窗口-队列
  • Dify 中级实验(09):HTTP 节点进阶——如何搞定认证、分页与错误重试?
  • Windows任务栏透明化神器TranslucentTB:从零到一打造沉浸式桌面
  • 抖音批量下载实战:一个晚上,我收下了整个博主的主页
  • 2010-2025年工业互联网试点示范项目企业数据
  • Obsidian多设备同步方案:Git与坚果云混合实践
  • 如何用Umi-OCR免费离线OCR快速提取文字:从截图识别到批量文档处理的完整指南
  • 大模型健康度监测:从基础设施到认知层的全链路运维实践
  • Obsidian PDF标注效率翻倍:PDF++安装到进阶
  • 阿里巴巴对话交互面试,LLM指令解析光看还不够还得摸得准
  • 麒麟系统密码重置:GRUB引导与救援模式实战指南
  • Windows黑屏仅鼠标能动?从原理到实战的完整修复指南
  • MemeSense连跳狂暴完全版插件深度解析:支持自定义命名、俯仰切换与旋转链式逻辑
  • 无人机视角航拍水葫芦检测数据集VOC+YOLO格式1417张1类别
  • 【爱马仕】Hermes Agent 本地环境搭建,Windows 轻量化整合包使用教程
  • Horos 开源医学影像软件实战指南:macOS 上零门槛玩转 DICOM 查看与 3D 影像重建
  • SMUDebugTool 完整上手攻略:AMD Ryzen 平台的参数读写、调试与性能调优实战
  • Draw.io Mermaid插件完整使用指南:三步让文本秒变专业图表
  • 二叉树与哈夫曼树:从核心原理到工程实践详解
  • Python pyshp库实战:Shapefile文件读写与GIS数据处理全解析
  • Multi-Agent系统核心协作模式与工程实践全解析
  • YimMenu怎么用?GTA5防崩溃增强菜单从零到会的实战教程
  • YOLOv8 分类任务实战|全网完整复现聚合物绝缘子上卸扣腐蚀二分类、均衡 1546 张数据集精细化调参、助力电网金具锈蚀智能巡检高效涨点
  • Nginx模块开发:ngx_create_paths函数详解与应用实践
  • 从零搭建个人网站:HTML/CSS/JS实战指南与响应式设计
  • SQL Server存储过程优化
  • DVT for Eclipse:提升大型Java项目开发效率的代码分析引擎
  • ECharts DataZoom组件深度配置:从滑块定位到缩放范围限制
  • JDK 9+为何不再内置JRE?从模块化原理到实战解决方案