力扣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];
}
// 前后缀积则将 + 变为 * 即可
相关推荐
沐怡旸8 小时前
【算法--链表】114.二叉树展开为链表--通俗讲解
算法·面试
tju新生代魔迷8 小时前
数据结构:双向链表
数据结构·链表
一只懒洋洋9 小时前
K-meas 聚类、KNN算法、决策树、随机森林
算法·决策树·聚类
方案开发PCBA抄板芯片解密10 小时前
什么是算法:高效解决问题的逻辑框架
算法
songx_9910 小时前
leetcode9(跳跃游戏)
数据结构·算法·游戏
学c语言的枫子10 小时前
数据结构——双向链表
c语言·数据结构·链表
小白狮ww10 小时前
RStudio 教程:以抑郁量表测评数据分析为例
人工智能·算法·机器学习
AAA修煤气灶刘哥10 小时前
接口又被冲崩了?Sentinel 这 4 种限流算法,帮你守住后端『流量安全阀』
后端·算法·spring cloud
Boop_wu11 小时前
[数据结构] 栈 · Stack
数据结构
kk”11 小时前
C语言快速排序
数据结构·算法·排序算法