力扣HOT100——560.和为k的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k的子数组的个数

子数组是数组中元素的连续非空序列。

示例 1:

复制代码
输入:nums = [1,1,1], k = 2
输出:2

思路:

前缀和+哈希。我们可以先利用一个数组s存储原数组的前缀和,在遍历s的时候利用一个哈希tmp来记录当前元素si出现的次数,同时寻找它们tmp中是否存在是si-k,如果存在,则答案ans加上tmps\[i-k],即si-k此前出现的次数。

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
       int ans=0;
       vector<int> s(nums.size()+1);
       for(int i=0;i<nums.size();i++)
       {
        s[i+1]=s[i]+nums[i];
       }
       unordered_map<int,int> tmp;
       for(int x:s)
       {
        
        ans+=tmp.contains(x-k)?tmp[x-k]:0;
        tmp[x]++;
    
       }
       return ans;
    }
};
复杂度分析
  • 时间复杂度:O(n),其中 n 为 nums 的长度。
  • 空间复杂度:O(n)。
相关推荐
ZhouDevin3 分钟前
算法论文/数据集3——CLD(TMLR2025)压缩训练集,仅保留对验证集有益的样本
人工智能·深度学习·算法·计算机视觉
码匠许师傅9 分钟前
【设计模式精讲】14.外观模式(Facade)
c++·设计模式·uml·外观模式
Tim_1017 分钟前
【LeetCode】29、两数相除
算法·leetcode·职场和发展
纪念 22926 分钟前
数据结构排序(三)
数据结构
船厂电气自动化ai大模型1 小时前
AI大模型与数学/第63课:矩阵定义、矩阵加法、标量乘法(逐级精讲)
数据结构·人工智能·深度学习·线性代数·算法
余额瞒着我当琳1 小时前
算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和
算法
你压到我腿毛了6661 小时前
C语言冒泡算法(Bubble sort)
c语言·数据结构·算法
xxwxx__2 小时前
C++ list 深度解析:从使用原理到模拟实现
开发语言·c++·list
Chester_19992 小时前
CSP202303C.LDAP
开发语言·c++·蓝桥杯·stl
靠沿2 小时前
贪心算法专题(三)
算法·贪心算法