当前位置: 首页 > article >正文

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

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

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

解法思路:

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

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;
    }
};

重点!!!

前后缀各种情况计算方法

// 笔记
// 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];
}
// 前后缀积则将 + 变为 * 即可


http://www.kler.cn/a/554658.html

相关文章:

  • 大模型高效注意力机制全解析:FlashAttention 与稀疏注意力实战
  • 【自动化脚本工具】Hammerspoon (Mac)
  • 基于STM32与IFX007T的电机驱动全解析(无人机/机器人实战)
  • 【队列】循环队列(Circular Queue)详解
  • 美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
  • Junit——白盒测试
  • 前端js题目大全
  • 区块链技术:构建区块链生态的核心要素
  • uniapp录制语音
  • 网络安全入门防御与加固(二)
  • Windows 10操作系统上安装PHP
  • 广度优先搜索--之重生之我是蒟蒻,从入坟到入坑式讲解
  • 练习题:45
  • JavaScript系列(78)--Service Worker 深入解析
  • RAGFLOW使用flask转发的open ai接口
  • BFS 解决 FloodFill 算法(典型算法思想)—— OJ例题算法解析思路
  • 神经网络八股(2)
  • Unity 位图字体
  • 3.1 actor基本框架(c#的Akka.Actor模式)
  • 约束性委派攻击和非约束性委派攻击