力扣hot100 ——和为k的子数组 前后缀和(积)各种情况总结

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k的子数组的个数

子数组是数组中元素的连续非空序列。

解法思路:

构建前缀和数组,以快速计算区间和;注意在计算区间和的时候,下标有偏移。

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int res = 0;
        int cur_sum = 0;
        
        unordered_map<int,int> pre_map;
        int pre = 0;
        pre_map[pre] = 1;
        for(auto &num : nums){
            pre +=num;
            if(pre_map[pre - k]){
                res+=pre_map[pre-k];
            }
            pre_map[pre] +=1;
        }
    
        return res;
    }
};

重点!!!

前后缀各种情况计算方法

cpp 复制代码
// 笔记
// 1.求前缀和
// 包含自身
int pre = 0;
for(auto & num : nums){
     pre += num;    // 每次遍历出来的 pre 即 每个元素的前缀和
}
// 不包含自身
for(int i = 1; i<nums.size();i++){
    pre += num[i-1];   // 此处注意,是从1开始,即第二个元素的前缀和就是第一个元素,第一个元素的前缀和为0
}

// 后缀和
// // 包含自己
int back = nums[nums.size-1];
for(int i = nums.size -2;i<=0; i--){
    back += num[i];  
}
// 不包含自己
int back = 0;
for(int i = nums.size -2;i<=0; i--){
    back += nums[i+1];
}
// 前后缀积则将 + 变为 * 即可
相关推荐
地平线开发者20 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮20 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者21 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考21 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway1 天前
解析残差网络 (ResNet)
算法
拖拉斯旋风1 天前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect1 天前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript