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

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. 编写代码

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

相关推荐

  1. 每日OJ题_算法_前缀⑤_力扣560. K 数组

    2024-03-24 22:00:02       63 阅读
  2. 「优选算法刷题」:K数组

    2024-03-24 22:00:02       46 阅读
  3. leetcode—K数组

    2024-03-24 22:00:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 22:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 22:00:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 22:00:02       82 阅读
  4. Python语言-面向对象

    2024-03-24 22:00:02       91 阅读

热门阅读

  1. 【python】(09)理解Python中的zip()和zip(*iterable)

    2024-03-24 22:00:02       42 阅读
  2. 力扣刷题之20.有效的括号

    2024-03-24 22:00:02       41 阅读
  3. 2024.03.08 校招 实习 内推 面经

    2024-03-24 22:00:02       39 阅读
  4. ubuntu20.04 安装ros1

    2024-03-24 22:00:02       42 阅读
  5. Linux权限理解

    2024-03-24 22:00:02       39 阅读
  6. python基础24(完结撒花)_习题总结

    2024-03-24 22:00:02       46 阅读
  7. pta L1-076 降价提醒机器人

    2024-03-24 22:00:02       35 阅读
  8. Rancher(v2.6.3)——Rancher部署Mysql(单机版)

    2024-03-24 22:00:02       39 阅读
  9. dddssss

    2024-03-24 22:00:02       36 阅读
  10. leetcode-Two Sum

    2024-03-24 22:00:02       32 阅读
  11. c#事件和委托代码demo

    2024-03-24 22:00:02       37 阅读