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

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

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

示例 1:

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

思路:

前缀和+哈希。我们可以先利用一个数组s存储原数组的前缀和,在遍历s的时候利用一个哈希tmp来记录当前元素s[i]出现的次数,同时寻找它们tmp中是否存在是s[i]-k,如果存在,则答案ans加上tmp[s[i]-k],即s[i]-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)。
相关推荐
Kidddddult1 小时前
力扣刷题Day 43:矩阵置零(73)
算法·leetcode·力扣
大龄Python青年3 小时前
C语言 交换算法之加减法,及溢出防范
c语言·开发语言·算法
左直拳3 小时前
c++中“&”符号代表引用还是取内存地址?
开发语言·c++·指针·引用·右值·取内存地址
啊我不会诶4 小时前
CF每日5题
算法
十年编程老舅4 小时前
二本计算机,毕业=失业?
c++·程序员·编程·秋招·c++项目·春招·qt项目
虾球xz5 小时前
游戏引擎学习第260天:在性能分析器中实现钻取功能
网络·c++·学习·游戏引擎
Yusei_05235 小时前
C++复习类与对象基础
c++
朱剑君5 小时前
排序算法——基数排序
算法·排序算法
COOCC15 小时前
PyTorch 实战:从 0 开始搭建 Transformer
人工智能·pytorch·python·深度学习·算法·机器学习·transformer
yzlAurora5 小时前
删除链表倒数第N个节点
数据结构·链表