力扣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)。
相关推荐
YL200404269 小时前
048路径总和III
数据结构·dfs
z2005093010 小时前
每日简单算法题——————跟着卡尔
算法
Irissgwe10 小时前
类与对象(三)
开发语言·c++·类和对象·友元
️是7811 小时前
信息奥赛一本通—编程启蒙(3395:练68.3 车牌问题)
数据结构·c++·算法
Liangwei Lin11 小时前
LeetCode 118. 杨辉三角
算法·leetcode·职场和发展
计算机安禾11 小时前
【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit
java·c++·算法
鼠鼠我(‘-ωก̀ )好困11 小时前
leetGPU
算法
雪度娃娃11 小时前
转向现代C++——优先选用nullptr而不是0和NULL
开发语言·c++
我星期八休息11 小时前
Linux系统编程—基础IO
linux·运维·服务器·c语言·c++·人工智能·算法
池塘的蜗牛11 小时前
A Low-Complexity Method for FFT-based OFDM Sensing
算法