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

【做一道算一道】和为 K 的子数组

给你一个整数数组 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

思路

看到想到是滑动窗口,调了力扣结果和本地调的对不上,看题解,发现说有负值,那滑动就不行。
官解是前缀和,记一下。
其中关键代码是:

count += mp[pre - k]; // 如果存在前缀和为pre - k,更新count

表示如果mp中存在pre - k,说明存在一个前缀和为pre - k,那么从这个前缀和的末尾到当前索引的子数组和为k。即从pre - k前缀和的末尾到当前索引位置的子数组满足条件,可被记录。
因此,将count增加mp[pre - k](该前缀和出现的次数,每个对应一种满足的情况)。
在这里插入图片描述

代码

滑动窗口(仅适合全为正):
奇怪的点,全为正的时候,本地调是正确的,力扣上结果就不对,不知道哪儿有问题。

class Solution {
public:int subarraySum(vector<int>& nums, int k) {int sum=0;int l=0,r=0;int cnt=0;sort(nums.begin(),nums.end());if(k<nums[0])return cnt;while(r<nums.size()){sum+=nums[r++];while(sum>=k){if(sum==k){cnt++;}sum-=nums[l++];  }}return cnt;}
};

前缀和:

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> mp;mp[0] = 1; // 初始化前缀和为0的出现次数为1int count = 0, pre = 0;for (auto x : nums) {pre += x; // 更新前缀和count += mp[pre - k]; // 如果存在前缀和为pre - k,更新countmp[pre]++; // 更新当前前缀和的出现次数}return count;}
};

官解当中多一个判定:

if (mp.find(pre - k) != mp.end())

可省略,因为即使 mp[pre - k] 之前没有出现过,其值也是0,不会对 count 产生影响。

http://www.lryc.cn/news/394237.html

相关文章:

  • Facebook应用开发:认证与授权登录流程详解
  • 实战:搭建一款属于自己的个人知识库~docusaurus(强大且丝滑)-2024.7.7(测试成功)
  • Java教程之IO模式精讲,NIO+BIO
  • 如何让代码兼容 Python 2 和 Python 3?Future 库助你一臂之力
  • AI让大龄程序员重新焕发活力
  • Python在现代办公自动化中的应用:会不会被裁?就看你的效率了!
  • Laravel5+mycat 报错 “Packets out of order”
  • 使用androidx.appcompat:appcompat:1.7.0无法运行的问题
  • 基于Java的水果商品销售网站
  • Redis 线程模型
  • 栈和队列---循环队列
  • 打卡第4天----链表
  • 07-7.1.1 查找的基本概念
  • 【数据结构与算法】快速排序双指针法
  • GESP C++一级真题
  • 短信验证码实现
  • pnpm的坑
  • 如何监控和分析 PostgreSQL 中的查询执行计划?
  • ruoyi-cloud登录接口实现滑块验证码
  • 三坐标测量机:柔性生产制造中的高精度测量解决方案
  • puppeteer 爬虫初探
  • Pandas 入门 15 题
  • 使用微信开发者工具连接gitee
  • 论文复现-基于决策树算法构建银行贷款审批预测模型(金融风控场景)
  • 力扣225题解析:使用队列实现栈的三种解法(Java实现)
  • 网络协议与标准
  • 154. 寻找旋转排序数组中的最小值 II(困难)
  • 5、MP4解复用---AAC+H264
  • 计算样本之间的相似度
  • 2-5 softmax 回归的简洁实现