数组前缀和

前缀和

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

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

相关推荐
AbandonForce34 分钟前
哈希表(HashTable,散列表)个人理解
开发语言·数据结构·c++·散列表
mask哥39 分钟前
力扣算法java实现汇总整理(下)
java·算法·leetcode
样例过了就是过了1 小时前
LeetCode热题100 编辑距离
数据结构·c++·算法·leetcode·动态规划
z200509301 小时前
C++中位图和布隆过滤器的一些面试题
开发语言·c++
khalil10202 小时前
代码随想录算法训练营Day-46 动态规划13 | 647. 回文子串、516.最长回文子序列、动态规划总结
数据结构·c++·算法·leetcode·动态规划·回文子串·回文子序列
挨踢ren2 小时前
单例模式:C++实现与多线程安全
c++·设计模式
he___H2 小时前
算法快与慢--哈希+双指针
算法·leetcode·哈希算法
用户805533698032 小时前
现代Qt开发教程(新手篇)1.14——日志
c++·qt
艾莉丝努力练剑3 小时前
【Linux网络】Linux 网络编程入门:TCP Socket 编程(下)
linux·运维·服务器·网络·c++·tcp/ip
宵时待雨3 小时前
linux笔记归纳4:进程概念
linux·运维·服务器·c++·笔记