算法---前缀和练习-2(和为k的子数组)

和为k的子数组

  • [1. 题目解析](#1. 题目解析)
  • [2. 讲解算法原理](#2. 讲解算法原理)
  • [3. 编写代码](#3. 编写代码)

1. 题目解析

题目地址点这里

2. 讲解算法原理

  1. 创建一个无序映射(哈希表) hash,用于统计前缀和的出现次数。初始时,将前缀和为 0 的次数设为 1,表示从数组开头到当前位置的累计和为 0 的子数组个数为 1。

  2. 初始化两个变量 sum 和 ret,分别表示当前的前缀和和满足条件的子数组个数,初始时都设为 0。

  3. 遍历数组 nums 的每个元素 e:

  4. 将 e 加到 sum 中,更新当前的前缀和。

  5. 检查 hash 中是否存在前缀和为 sum - k 的记录,即是否存在一个位置 i,使得从位置 i 到当前位置的子数组的和为 k。如果存在,将 hash[sum - k] 的值累加到 ret 中,表示找到了满足条件的子数组。

  6. 更新 hash[sum],将前缀和 sum 的出现次数加 1。

  7. 完成遍历后,返回 ret,即满足条件的子数组的个数。


3. 编写代码

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        unordered_map<int,int> hash;//统计前缀和次数
        hash[0]=1;
        int sum=0,ret=0;
        for(auto e:nums)
        {
            sum+=e;
            if(hash.count(sum-k)) ret+=hash[sum-k];
            hash[sum]++;
        }
        return ret;
    }
};
相关推荐
2301_76570314几秒前
C++中的策略模式应用
开发语言·c++·算法
TGITCIC1 分钟前
RAG不是魔法,是工程:从知识库到企业部署的硬核实践
人工智能·算法·机器学习·rag·ai agent·ai开发·rag增强检索
GHL2842710901 分钟前
*:端口 & 127.0.0.1:端口
运维·服务器·c++
王老师青少年编程2 分钟前
信奥赛C++提高组csp-s之树形DP详解及编程实例
c++·动态规划·树形dp·csp·信奥赛·csp-s·提高组
求梦8208 分钟前
【力扣hot100题】两两交换链表中的节点(25)
算法·leetcode·链表
passxgx9 分钟前
12.1 均值、方差与概率
算法·均值算法·概率论
m0_7482486511 分钟前
C/C++ 项目与 Rust 项目区别
c语言·c++·rust
bugu___13 分钟前
仿muduo库实现并发服务器(3)
开发语言·c++
血小板要健康20 分钟前
189.轮转数组,力扣
数据结构·算法·leetcode
项目申报小狂人21 分钟前
CEC2024获胜算法mLSHADE-RL:具有重新启动和本地搜索机制的多操作员集成LSHADE
算法