力扣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)。
相关推荐
linff9111 小时前
Reactor和Proactor
c++·网络编程’
爱coding的橙子1 小时前
每日算法刷题Day19 5.31:leetcode二分答案3道题,用时1h
算法·leetcode·职场和发展
末日汐2 小时前
STL-list
开发语言·c++
qq_433554542 小时前
C++ list数据删除、list数据访问、list反转链表、list数据排序
开发语言·c++·list
初遇你时动了情2 小时前
dart常用语法详解/数组list/map数据/class类详解
数据结构·flutter·list
uyeonashi2 小时前
【从零开始学习QT】快捷键、帮助文档、Qt窗口坐标体系
开发语言·c++·qt·学习
地平线开发者2 小时前
征程 6EM 常见 QConfig 配置解读与示例
算法·自动驾驶
GEEK零零七3 小时前
Leetcode 1908. Nim 游戏 II
算法·leetcode·博弈论
愚润求学3 小时前
【Linux】mmap文件内存映射
linux·运维·服务器·开发语言·c++
sbc-study3 小时前
混沌映射(Chaotic Map)
开发语言·人工智能·python·算法