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

leetcode_560 和为K的子数组

1. 题意

求和为k的子数组的个数

2. 题解

2.1 暴力

依然是枚举子串的做法,不过这题竟然没有超时。

固定子串的起点,再不断在该串后面添加数,并计算和。

class Solution {
public:int subarraySum(vector<int>& nums, int k) {// two sum int i = 0;int n = nums.size();int ans = 0;for (int i = 0; i < n; ++i) {int tot = 0;for (int j = i; j < n; ++j) {tot += nums[j];if (tot == k)ans++;}}return ans;}
};
2.2 前缀和

对于子串和的问题, 我们都需要考虑能否用下前缀和。

对于本题目,如果使用前缀和的话;就变成了找到所有的
pre[j]−pre[i]=k,i<jpre[j] -pre[i] = k, i<jpre[j]pre[i]=k,ij

我们仔细一看pre[j]+(−pre[i])=kpre[j] + (-pre[i])=kpre[j]+(pre[i])=k,这不就是两数之和变个形吗?

因此可以用哈希表进行优化。

还有需要注意的一点是对pre[0]pre[0]pre[0]的处理!

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int> cnts;int ans = 0;int cur = 0; for (int num: nums) {cnts[cur]++;cur += num;if (cnts.contains( cur - k)) {ans += cnts[cur - k];}}return ans;}
};
http://www.xdnf.cn/news/1197883.html

相关文章:

  • C语言——————学习笔记(自己看)
  • 2025.7.27总结—新励成
  • Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation
  • 学习游戏制作记录(改进投掷剑的行为)7.27
  • 孤儿进程、僵尸进程和守护进程
  • 【element-ui】HTML引入本地文件出现font找不到/fonts/element-icons.woff
  • Android CameraX 使用指南:简化相机开发
  • 从零搭建3D激光slam框架-基于mid360雷达节点实现
  • [10月考试] C
  • 论文阅读-IGEV
  • Java进阶7:Junit单元测试
  • Windows10系统使用Cmake4.1.0构建工具+Visual Studio2022编译Opencv4.11教程
  • LabelImg:简洁高效的图像标注工具和下载
  • B站直播视频 | 深度讲解 Yocto 项目:从历史、架构到实战与趋势
  • Vue vuex模块化编码
  • 网络基础19:OSPF多区域实验
  • 中级全栈工程师笔试题
  • Maven之多模块项目管理
  • 什么是加密货币中的节点?
  • 【Linux系统编程】环境变量,进程地址空间与进程控制
  • 使用GIS中基于森林的分类与回归模型来估算房屋价值
  • 工业控制系统安全之 Modbus 协议中间人攻击(MITM)分析与防范
  • 解决ubantu系统下matplotlib中文乱码问题
  • 逆向入门(43)程序逆向篇-tsrh-crackme
  • 【笔记】系统
  • 20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音
  • 【设计】设计一个web版的数据库管理平台后端(之二)
  • 29.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--用户配置服务
  • Java中排序规则详解
  • solidity从入门到精通 第六章:安全第一