力扣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)。
相关推荐
桦015 分钟前
[除自身以外数组的乘积]
算法
2301_8095615241 分钟前
c++day5
java·c++·面试
草莓熊Lotso1 小时前
【数据结构初阶】--二叉树(五)
c语言·数据结构·经验分享·笔记·其他
CoovallyAIHub1 小时前
原来工业 AI 异常检测只做了一半?AnomalyNCD 补上了“最关键一环”
深度学习·算法·计算机视觉
学习编程的gas1 小时前
C++:STL中list的使用和模拟实现
开发语言·c++
shanks661 小时前
【图像处理】直方图均衡化c++实现
c++·图像处理·数码相机
shenghaide_jiahu1 小时前
数学建模——01规划/整数规划
算法·数学建模
lsnm1 小时前
【LINUX网络】使用TCP简易通信
linux·服务器·c语言·网络·c++·tcpdump
今晚打老虎1 小时前
c++之基础B(第一课)
开发语言·c++
CoovallyAIHub1 小时前
数据集分享 | PCB缺陷检测与玻璃缺陷实例分割数据集分享
深度学习·算法·计算机视觉