【力扣】560.和为K的子数组

news/2025/2/3 16:21:35/

AC截图

题目

前缀和的概念

首先,我们使用一个叫做“前缀和”的概念。对于数组中的任何位置 j,前缀和 pre[j] 是数组中从第一个元素到第 j 个元素的总和。这意味着如果你想知道从元素 i+1 到 j 的子数组的和,你可以用 pre[j] - pre[i] 来计算。

使用 Map 来存储前缀和 在代码中,我们用一个 Map(哈希表)来存储每个前缀和出现的次数。这是为了快速检查某个特定的前缀和是否已经存在,以及它出现了多少次。

核心逻辑解析 当我们在数组中向前移动时,我们逐步增加 pre(当前的累积和)。对于每个新的 pre 值,我们检查 pre - k 是否在 Map 中:

pre - k 的意义:这个检查的意义在于,如果 pre - k 存在于 Map 中,说明之前在某个点的累积和是 pre - k。由于当前的累积和是 pre,这意味着从那个点到当前点的子数组之和恰好是 k(因为 pre - (pre - k) = k)。

如何使用这个信息:如果 pre - k 在 Map 中,那么 pre - k 出现的次数表示从不同的起始点到当前点的子数组和为 k 的不同情况。这是因为每一个 pre - k 都对应一个起点,使得从那个起点到当前点的子数组和为 k。

因此,每当我们找到一个 pre - k 存在于 Map 中时,我们就把它的计数(即之前这种情况发生的次数)加到 count 上,因为这表示我们又找到了相应数量的以当前元素结束的子数组,其和为 k。

例子 假设 k = 7,并且我们当前的累积和 pre 是 10,如果在 Map 中 3(即 10 - 7)出现了两次,这表示存在两个不同的起始点,使得从那些起始点到当前点的子数组之和是 7。

代码

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int> map;map[0]=1;int pred=0;int cnt=0;for(int num:nums){pred += num;if(map.find(pred-k)!=map.end()){cnt += map[pred-k];}map[pred]++;}return cnt;}
};


http://www.ppmy.cn/news/1568996.html

相关文章

论文阅读:Realistic Noise Synthesis with Diffusion Models

这篇文章是 2025 AAAI 的一篇工作&#xff0c;主要介绍的是用扩散模型实现对真实噪声的仿真模拟 Abstract 深度去噪模型需要大量来自现实世界的训练数据&#xff0c;而获取这些数据颇具挑战性。当前的噪声合成技术难以准确模拟复杂的噪声分布。我们提出一种新颖的逼真噪声合成…

Kafka 使用说明(kafka官方文档中文)

文章来源&#xff1a;kafka -- 南京筱麦软件有限公司 第 1 步&#xff1a;获取 KAFKA 下载最新的 Kafka 版本并提取它&#xff1a; <span style"color:#000000"><span style"background-color:#f5f2f0"><span style"color:#000000&quo…

hexo部署到github page时,hexo d后page里面绑定的个人域名消失的问题

Hexo 部署博客到 GitHub page 后&#xff0c;可以在 setting 中的 page 中绑定自己的域名&#xff0c;但是我发现更新博客后绑定的域名消失&#xff0c;恢复原始的 githubio 的域名。 后面搜索发现需要在 repo 里面添加 CNAME 文件&#xff0c;内容为 page 里面绑定的域名&…

【自然语言处理(NLP)】多头注意力(Multi - Head Attention)原理及代码实现

文章目录 介绍多头注意力原理代码实现导包多头注意力结构qkv转换output转换构建注意力模块添加Bahdanau的decoder训练预测 个人主页&#xff1a;道友老李 欢迎加入社区&#xff1a;道友老李的学习社区 介绍 **自然语言处理&#xff08;Natural Language Processing&#xff0…

计算机网络 性能指标相关

目录 吞吐量 时延 时延带宽积 往返时延RTT 利用率 吞吐量 时延 时延带宽积 往返时延RTT 利用率

使用QSqlQueryModel创建交替背景色的表格模型

class UserModel(QSqlQueryModel):def __init__(self):super().__init__()self._query "SELECT name, age FROM users"self.refresh()def refresh(self):self.setQuery(self._query)# 重新定义data()方法def data(self, index, role): if role Qt.BackgroundRole…

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目&#xff0c;admin是8087&#xff0c;gateway是8088&#xff0c;consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目&#xff0c;那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…

Selenium 浏览器操作与使用技巧——详细解析(Java版)

目录 一、浏览器及窗口操作 二、键盘与鼠标操作 三、勾选复选框 四、多层框架/窗口定位 五、操作下拉框 六、上传文件操作 七、处理弹窗与 alert 八、处理动态元素 九、使用 Selenium 进行网站监控 前言 Selenium 是一款非常强大的 Web 自动化测试工具&#xff0c;能够…