数组前缀和

前缀和

前缀和就是指前缀的和,例如在数组中,从开始到 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;
    }
};

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

相关推荐
Lhan.zzZ29 分钟前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
sysu_chenxy2 小时前
二重循环输出二维图形
c++
Navigator_Z2 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil2083 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展
Nil2083 小时前
leetcode 72编辑距离
算法·leetcode·职场和发展
划破黑暗的第一缕曙光3 小时前
[C++]:2.类和对象(下)
c++·类和对象·对象·类
Nil2084 小时前
leetcode 136只出现一次的数字
leetcode·哈希算法·散列表
黎相思5 小时前
LRU Cache
c++·缓存
UIU1145 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
xxwl5856 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法