数组前缀和

前缀和

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

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

相关推荐
XWalnut8 分钟前
LeetCode刷题 day10
数据结构·算法·leetcode
史迪仔011211 分钟前
[QML] 交互事件深度解析:鼠标、键盘、拖拽
前端·c++·qt
米啦啦.25 分钟前
类继承、子类拷贝构造函数、赋值运算符重载函数、多继承(虚继承)
c++·多继承·类继承·赋值运算符重载
swift1922132 分钟前
Qt多语言问题 —— 静态成员变量
开发语言·c++·qt
用户8055336980338 分钟前
现代Qt开发教程(新手篇)1.4——容器
c++·qt
ulias2121 小时前
Linux中的开发工具
linux·运维·服务器·开发语言·c++·windows
x_xbx1 小时前
LeetCode:42. 接雨水
算法·leetcode·职场和发展
qq_466302451 小时前
u盘插入拔出,listView不显示盘符变化
c++·qt
小熊Coding1 小时前
Windows 上安装 mysqlclient 时遇到了编译错误,核心原因是缺少 Microsoft Visual C++ 14.0 或更高版本 的编译环境。
c++·windows·python·microsoft·django·mysqlclient·bug记录
艾莉丝努力练剑1 小时前
【Linux线程】Linux系统多线程(六):<线程同步与互斥>线程同步(上)
java·linux·运维·服务器·c++·学习·线程