news 2026/4/22 20:08:47

力扣 500 和为 K 的子数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣 500 和为 K 的子数组
Problem: 560.和为 K 的子数组

思路

前缀和 + 小技巧

解题过程

题目大意可以理解为,让找一个数组中的连续非空子数组的和为k的数量。
这里可以使用前缀和数组suf[]来快速找到符合条件的子数组头和尾。因为一个子数组(i,j)的大小为suf[j] - suf[i-1],因此我们这里只需要找到suf[j] - suf[i-1] = k的两个数,那么题目就变成找到两个数的差为k。那么显而易见可以用哈希来找。
这里有个小技巧,我一开始存储的哈希是把suf[i]和i一起存了,于是变得判断当前的i是否大于哈希找出来的i(因为j>i-1),就得多个查找过程,这样可能会超时,后面发现直接边查边存就不会有这种问题了,这个小技巧适用于查找过程中有下标大小影响的时候,因为ii比当前下班大的下标的数据还未存入,所以这个时候查询只会查找到比当前下标小的数据。

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度:O(n)

Code

class Solution { public int subarraySum(int[] nums, int k) { int len = nums.length; int[] suf = new int[len + 1]; for(int i = 0; i < len; i++) { suf[i + 1] = nums[i] + suf[i]; } Map<Integer,Integer> map = new HashMap<>(); int ans = 0; for(int i = 0; i <= len; i++) { int dif = suf[i] - k; ans += map.getOrDefault(dif, 0); map.merge(suf[i], 1, Integer::sum); } return ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 17:53:05

PIL库将图片位深度是1、8、32统一转换为24的方法

深度学习中通常遇到各种各样的图片&#xff0c;位深度有的时候各不相同&#xff0c;容易影响训练测试&#xff0c;因此为了避免麻烦&#xff0c;一般将图片统一为位深度是24 通用转换方法 from PIL import Imagedef convert_to_24bit(input_path, output_path):""&qu…

作者头像 李华
网站建设 2026/4/16 16:56:44

【UI Qt】入门笔记

目录 1、Qt 主要版本发展历程 2、各版本详细对比表 3、底层库对比 4、Qt基类 5、举例 6、QApplication与窗口关联 1、Qt 主要版本发展历程 版本 发布年份 主要特点 当前状态 Qt 1 1995 第一个公开版本&#xff0c;仅支持 Unix/X11 已淘汰 Qt 2 1999 引入信号槽…

作者头像 李华
网站建设 2026/4/20 10:01:59

毕业论文任务书范文推荐:7大平台+AI修改工具

毕业论文任务书范文推荐&#xff1a;7大平台AI修改工具 工具名称 核心功能 生成速度 适用场景 独特优势 aibiye 论文初稿生成 20-30分钟 全学科通用 自动插入图表公式 aicheck 初稿查重 20-30分钟 急需查重场景 独创降AIGC算法 askpaper 初稿生成 20-30分钟 …

作者头像 李华
网站建设 2026/4/20 16:19:34

JavaScript处理时间详解:时分秒的获取、计算与格式化

在JavaScript中处理时间&#xff0c;尤其是时、分、秒的获取、计算与格式化&#xff0c;是前端开发中一项基础且频繁的任务。无论是制作倒计时、显示当前时间&#xff0c;还是处理时间间隔&#xff0c;都离不开对这三个时间单位的精确操作。本文将从实际应用场景出发&#xff0…

作者头像 李华