力扣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];
}
// 前后缀积则将 + 变为 * 即可
相关推荐
小指纹40 分钟前
图论-最短路 Bellman-Ford算法
c++·算法·objective-c·图论
屁股割了还要学41 分钟前
【数据结构入门】时间、空间复杂度的计算
c语言·开发语言·数据结构·c++·算法
myjs9991 小时前
数学=符号
java·前端·算法
麦兜*1 小时前
大模型时代,Transformer 架构中的核心注意力机制算法详解与优化实践
jvm·后端·深度学习·算法·spring·spring cloud·transformer
coding随想1 小时前
算法界的“达摩克利斯之剑”——NP完全性理论
算法
秋难降2 小时前
栈:从基础概念到实战解题(详细)
数据结构·算法·排序算法
归云鹤2 小时前
QT信号和槽怎么传输自己定义的数据结构
开发语言·数据结构·qt
ezl1fe3 小时前
RAG 每日一技(十):向量检索的“死穴”?用混合搜索(Hybrid Search)来拯救!
后端·算法
Ahu_iii3 小时前
【图论基础】理解图的“闭环”:Tarjan 强连通分量算法全解析
算法·图论
PixelMind3 小时前
【IQA技术专题】DISTS代码讲解
图像处理·人工智能·python·算法·iqa