力扣506——和为K的子数组

https://leetcode.cn/problems/subarray-sum-equals-k/?envType=study-plan-v2&envId=top-100-liked

1. 用到了前缀和的概念:

给定一个数组nums,从该数组的初始位置元素开始相加,前缀和数组 prefixSum 的第 i 个元素表示从数组开头到第 i 个位置的元素之和。

对于数组 nums = [1, 2, 3, 4, 5],其前缀和数组 prefixSum[1, 3, 6, 10, 15]。其中,prefixSum[i] 表示数组 nums 中前 i+1 个元素的和。

2. 思路原理

(1) 为啥要计算前缀和?

当前缀和>target时,如果在前缀和中还存在“前缀和-target”,就说明数组中存在一截连续部分的和等于target

(2) 看看有几个符合要求的前缀和

total += 符合要求的前缀和的数量

(3)先判断还是先添加

假设我们的数组为 nums = [3, 4, 7, 2],目标值为 k = 7。我们用哈希表记录前缀和出现的次数。

  1. 首先,初始化前缀和哈希表,包含一个前缀和为 0 的情况:Prefix.put(0, 1)
  2. 遍历到第一个元素 3 时,前缀和为 3,将其添加到哈希表中,哈希表为 {0: 1, 3: 1}
  3. 遍历到第二个元素 4 时,前缀和为 3 + 4 = 7。此时我们检查哈希表中是否存在前缀和为 7 - 7 = 0,即是否存在以当前位置为结尾的子数组的和等于目标值 k。由于哈希表中存在前缀和为 0,我们将之前统计的子数组个数累加到结果中。然后,我们将当前前缀和 7 添加到哈希表中,哈希表为 {0: 1, 3: 1, 7: 1}
  4. 继续遍历数组,遍历到第三个元素 7 时,前缀和为 3 + 4 + 7 = 14。我们检查哈希表中是否存在前缀和为 14 - 7 = 7,即是否存在以当前位置为结尾的子数组的和等于目标值 k。由于哈希表中存在前缀和为 7,说明存在一个满足条件的子数组,我们将之前统计的子数组个数累加到结果中。

这样的例子说明了为什么在计算前缀和之前要先判断是否存在 sum - k 这样的前缀和,然后再将当前前缀和添加到哈希表中。这样能够保证正确地统计子数组的个数,避免出现错误的情况。

3. 完整代码

class Solution {public int subarraySum(int[] nums, int k) {int res = 0;int sum = 0;Map<Integer, Integer> Prefix = new HashMap<>();// 前缀和的初始化,key表示前缀和的值,value表示满足这个值的前缀和的个数Prefix.put(0,1);for(int i=0; i<nums.length; ++i){sum += nums[i];if(Prefix.containsKey(sum - k)){res += Prefix.get(sum-k);}// 得先判断前缀和map里是否已经存在了sum-k// 再添加新的sumPrefix.put(sum, Prefix.getOrDefault(sum,0)+1);}return res;} 
}

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

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

相关文章

POS 之 验证者如何才能提议区块

验证者提议区块 验证者帐户提议区块。 验证者帐户由节点运营商(可以是AWS等待云服务商)管理&#xff0c;节点运营商运行验证者软件作为其执行和共识客户端的一部分&#xff0c;并且已经向存款合约中存入了至少 32 个以太币 然而&#xff0c;每个验证者只是偶尔负责提议一个区块…

IBFKJ-299 8AI/AO,DI/DO开关量模拟量同时数据采集

产品特点&#xff1a; ● DC12-30V宽压供电&#xff1b; ● RS485通讯光电隔离&#xff0c;输入光耦隔离&#xff0c;继电器输出触点隔离&#xff1b; ●通讯接口支持RS232、RS485&#xff1b; ●支持标准Modbus RTU/TCP/ASCII协议 ●具有闪开、闪断功能&#xff0c;可以在…

使用Spring事件机制,合理的进行业务解耦

文章目录 事件机制介绍一、事件源类二、事件监听类1.方式一&#xff1a;自定义类实现 ApplicationListener 接口&#xff1a;1.方式二&#xff1a;通过注解去标记事件消费方法&#xff1a; 三、事件发布 事件机制介绍 事件发布流程中&#xff0c;有三个核心概念&#xff0c;他…

基于log4cpp封装日志类

一、log4cpp的使用 1. 下载log4cpp log4cpp官方下载地址 2. 安装log4cpp 第一步&#xff1a;解压 tar zxvf log4cpp-1.1.4.tar.gz 第二步&#xff1a;进入log4cpp文件夹并执行 ./configure tips&#xff1a;如果是ARM架构的CPU可能会失败&#xff0c;如下面这种情况&a…

细粒度分析:AI是如何一步步审视你的健康记录的?

细粒度分析&#xff1a;AI是如何一步步审视你的健康记录的&#xff1f; 提出背景AS-LLM 整体框架关联分析 提出背景 论文&#xff1a;https://arxiv.org/pdf/2403.01002.pdf 代码&#xff1a;https://github.com/microsoft/attribute-structuring/ 临床总结在医疗领域有特定的…

论文阅读——Vision Transformer with Deformable Attention

Vision Transformer with Deformable Attention 多头自注意力公式化为&#xff1a; 第l层transformer模块公式化为&#xff1a; 在Transformer模型中简单地实现DCN是一个non-trivial的问题。在DCN中&#xff0c;特征图上的每个元素都单独学习其偏移&#xff0c;其中HWC特征图上…

Windows Server 各版本搭建 Web 服务器实现访问本地 Web 网站(03~19)

一、Windows Server 2003 点击左下角开始➡管理工具➡管理您的服务器&#xff0c;点击添加或删除角色 点击下一步 选择自定义&#xff0c;点击下一步 选择应用程序服务器&#xff0c;点击下一步 不勾选&#xff0c;点击下一步 这里提示插入磁盘&#xff0c;咱们提前下载好 IIS…

iOS 判断触摸位置是否在图片的透明区域

装扮功能系列&#xff1a; Swift 使用UIScrollerView 实现装扮功能&#xff08;基础&#xff09;Swift 使用UIScrollerView 实现装扮功能&#xff08;拓展&#xff09;iOS 判断触摸位置是否在图片的透明区域 背景 在装扮功能中&#xff0c;一般都是长按使道具进入编辑状态&…

关于 c++ 中字符的 U 限定

文章目录 关于c中字符的U限定 <2023-08-23 周三> 关于c中字符的U限定 今天早上还在查找char s Ua;这种c的语法是什么意思&#xff1f;下午就看到了这篇文章&#xff1a;“This Is How To Use std::u32string In C Software”&#xff1a;

迁移学习怎么用

如果想实现一个计算机视觉应用&#xff0c;而不想从零开始训练权重&#xff0c;比方从随机初始化开始训练&#xff0c;更快的方式是下载已经训练好权重的网络结构&#xff0c;把这个作为预训练&#xff0c;迁移到你感兴趣的新任务上。ImageNet、PASCAL等等数据库已经公开在线。…

Python笔记(四)—— Python函数

4.1 函数的初体验 函数 函数&#xff1a;是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段 name "itheima" length len(name) print(length) 运行结果&#xff1a; 思考&#xff1a;为什么随时都可以使用len()统计长度 因为&#xff…

mysql不能远程连接的解决办法

问题: 安装完mysql之后,在本机可以正常使用,但是通过其它电脑不能远程连接. 解决方案: 在安装mysql的电脑上,登录mysql, 执行权限 GRANT ALL PRIVILEGES ON *.* TO root"%" IDENTIFIED BY "password"; 刷新权限 flush privileges;