数组前缀和

前缀和

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

在这一道题目里面,中间某一段连续子数组和为k,意思即为sum[i] - sum[j - 1] = k,也即sum[i] - k = sum[j - 1],所以当我们求每一个的前缀和的时候,只需要统计对应的sum[j - 1]个数即可。sum对应的个数用map存储。注意map[0] = 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 分钟前
day49(12.30)——leetcode面试经典150
算法·leetcode·面试
天赐学c语言3 分钟前
12.30 - 合并区间 && C++中class和C语言中struct的区别
c语言·c++·算法·leecode
陳103010 分钟前
C++:vector(1)
开发语言·c++
有一个好名字20 分钟前
力扣-递增的三元子序列
算法·leetcode·职场和发展
巨人张26 分钟前
C++零基础游戏----“大鱼吃小鱼”
java·c++·游戏
Savior`L29 分钟前
基础算法:模拟、枚举
数据结构·c++·算法
雪花desu40 分钟前
【Hot100-Java中等】LeetCode 11. 盛最多水的容器:双指针法的直观理解与数学证明
算法·leetcode
POLITE341 分钟前
Leetcode 438. 找到字符串中所有字母异位词 JavaScript (Day 4)
javascript·算法·leetcode
汉克老师42 分钟前
GESP2025年12月认证C++一级真题与解析(判断题1-10)
c++·gesp一级·gesp1级
_Voosk1 小时前
macOS Xcode C++程序设置相对路径根目录
c语言·c++·xcode·swift