力扣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];
}
// 前后缀积则将 + 变为 * 即可
相关推荐
mmmmath_34 小时前
LeetCode.199.二叉树的右视图
数据结构·leetcode
专注仿真4 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸4 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫4 小时前
2028编程圈很火的10个Skills
算法·面试·github
Nil2089 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing9 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
mmmmath_39 小时前
LeetCode.429.N叉树的层序遍历
数据结构·leetcode
loulanyue_10 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院10 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
suhan11 小时前
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
数据结构·后端·算法