数组前缀和

前缀和

前缀和就是指前缀的和,例如在数组中,从开始到 i 就是到 i 的前缀和。前缀和一般用来求中间连续某一段的和,例如sumi - sumj - 1就可以求出j 到 i 这一段的和。

在这一道题目里面,中间某一段连续子数组和为k,意思即为sumi - sumj - 1 = k,也即sumi - k = sumj - 1,所以当我们求每一个的前缀和的时候,只需要统计对应的sumj - 1个数即可。sum对应的个数用map存储。注意map0 = 1,即本身本来有一个。

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int ans = 0;
        unordered_map<int, int> mp;
        int pre = 0;
        mp[0] = 1;
        for (int i : nums) {
            pre += i;
            ans += mp[pre - k];
            ++mp[pre];
        }
        return ans;
    }
};

当然还有二维数组的前缀和,不过大致原理就是这样,通过两个前缀和求中间的和。

相关推荐
洛水水3 分钟前
【力扣100题】81.寻找两个正序数组的中位数
数据结构·算法·leetcode
洛水水43 分钟前
【力扣100题】85.每日温度
算法·leetcode·职场和发展
Coder-magician1 小时前
《代码随想录》刷题打卡day15:二叉树part05
数据结构·c++·算法
Kurisu_红莉栖1 小时前
力扣56合并区间
算法·leetcode
Irissgwe1 小时前
算法的时间复杂度和空间复杂度
数据结构·c++·算法·c·时间复杂度·空间复杂度
随意起个昵称1 小时前
区间dp-基础题目3(永别)
c++·算法
有点。1 小时前
C++贪心算法二(练习题)
c++·算法·贪心算法
开源Z1 小时前
LeetCode 135 · 分发糖果:两次扫描,先左后右取最大
算法·leetcode
坚果派·白晓明1 小时前
鸿蒙 PC 应用集成 libhv 鸿蒙化三方库 —— AtomCode + Skills 驱动的高效集成实践
c语言·c++·ai编程·harmonyos·atomcode
退休倒计时1 小时前
【每日一题】LeetCode 19. 删除链表的倒数第 N 个结点 TypeScript
leetcode·链表·typescript