【前缀合】Leetcode 和为k的子数组

题目解析

560. 和为 K 的子数组


算法讲解

前面滑动窗口里面有一道题和这个题很相似,它是求出和为k的最短子数组的长度,但是这道题不能使用滑动窗口,因为虽然找到一段子数组的和等于k,但是这道题里面存在0和负数,可能这一段区间里面还有一段子数组也等于k
因此需要使用前缀和算法,我们求出以i位置为结尾的前缀和,在这一段区间中寻找有没有前缀和 - k的区间

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        unordered_map<int, int>Hash;
        int sum = 0;
        int ret = 0;
        Hash[0]++;
        for(auto& n : nums)
        {
            sum += n;  //此处计算的就是以i位置为结尾的前缀和
            if(Hash.count(sum - k))ret += Hash[sum - k];  //寻找这一段区间有没出现sum - k)
            Hash[sum]++;
        }
        return ret;
    }
};

相关推荐
TracyCoder1232 小时前
LeetCode Hot100(27/100)——94. 二叉树的中序遍历
算法·leetcode
草履虫建模8 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
VT.馒头13 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
不穿格子的程序员17 小时前
从零开始写算法——普通数组篇:缺失的第一个正数
算法·leetcode·哈希算法
独自破碎E18 小时前
大整数哈希
算法·哈希算法
VT.馒头19 小时前
【力扣】2722. 根据 ID 合并两个数组
javascript·算法·leetcode·职场和发展·typescript
执着25920 小时前
力扣hot100 - 108、将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
历程里程碑20 小时前
普通数组----最大子数组和
大数据·算法·elasticsearch·搜索引擎·排序算法·哈希算法·散列表
52Hz11821 小时前
力扣230.二叉搜索树中第k小的元素、199.二叉树的右视图、114.二叉树展开为链表
python·算法·leetcode
苦藤新鸡21 小时前
56.组合总数
数据结构·算法·leetcode