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

【LeetCode】560.和为K的子数组

目录

  • 题目
    • 题目要求
      • 什么是子数组?
    • 解法 前缀和 + 哈希表
      • 核心思路
      • 具体步骤
    • 代码

题目

题目链接:LeetCode-560题

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。

题目要求

  1. 子数组是数组中元素的连续非空序列
  2. 统计和为 k 的子数组的个数

什么是子数组?

子数组是数组中连续的一段元素组成的序列。例如,数组 [1, 2, 3] 的子数组包括 [1]、[2]、[3]、[1, 2]、[2, 3] 和 [1, 2, 3]。

解法 前缀和 + 哈希表

核心思路

如何快速统计和为 k 的子数组?

  • 前缀和是一种常用的技巧,用于快速计算任意子数组的和。
    我们需要找到所有满足 sum(nums[i…j]) = k 的子数组。根据前缀和的性质,可以转化为
dp[j] - dp[i-1] = k //前缀和-前缀和

即:

dp[j] - k = dp[i-1]

换句话说,我们需要找到所有满足 dp[j] - k 等于某个前缀和dp[i-1] 的情况。

  • 哈希表的引入
    为了快速查找是否存在某个前缀和,我们可以使用哈希表来记录前缀和出现的次数。

具体步骤

1.初始化:

  • 使用哈希表 记录前缀和出现的次数。初始时,hash[0] = 1,表示前缀和为 0 的情况出现了一次,这样可以使刚好等于k的数字成为一个子数组。

  • 初始化 sum 为 0,用于记录当前的前缀和。

  • 初始化 count 为 0,用于记录满足条件的子数组的个数。

2.遍历数组:

  • 对于数组中的每一个元素 num,更新sum,即 sum += num。

  • 检查 sum - k 是否在哈希表中。如果在,则说明存在若干个子数组的和为 k,将这些子数组的数量累加到 count 中。

  • 更新哈希表,将当前前缀和 currentSum 的出现次数加一。

代码

class Solution {
public:
    unordered_map<int,int> hash;
    int ret = 0;
    int subarraySum(vector<int>& nums, int k) {
        hash[0] = 1; //为了使得一个数也可以成为一个数组

        //前缀和
        int sum = 0;
        for(int i = 0;i<nums.size();i++)
        {
            sum+=nums[i];
            if(hash.count(sum-k)) ret+=hash[sum-k];
            hash[sum]++;
        }
        return ret;
    }
};

相关文章:

  • 使用 MySQL 从 JSON 字符串提取数据
  • 内部知识库:安全协作驱动数字化转型新路径
  • 【Linux AnolisOS】关于Docker的一系列问题。尤其是拉取东西时的网络问题,镜像源问题。
  • 百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)
  • C++和OpenGL实现3D游戏编程【总览】
  • spring cloud 微服务部署(2025年)第一章:Nacos、LoadBalancer、GateWay、Ribbon集成之Nacos部署
  • 鼠标悬浮到某个 <li> 元素时,将 hoverLiData 更新为当前 item 的 id
  • mac 本地安装deepseek
  • Flutter:动态表单(在不确定字段的情况下,生成动态表单)
  • Linux 进程控制(进程创建,进程等待)
  • 手机功耗BugReport字段含义介绍
  • 软件考研,选择华科还是科软?
  • Java与C语言中取模运算符%的区别对比
  • 如何使用 Ollama 和 Docker 设置 DeepSeek
  • Query String 传递 json 对象参数、map参数
  • 【设计模式】【结构型模式】组合模式(Composite)
  • 根据deepseek模型微调训练自动驾驶模型及数据集的思路
  • 智能猫眼实现流程图
  • matlab数据处理:创建网络数据
  • 接口测试工具:Postman
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿元
  • 张巍任中共河南省委副书记
  • 土耳其、美国、乌克兰三边会议开始
  • 350种咖啡主题图书集结上海,20家参展书店买书送咖啡
  • 最高人民法院原副院长唐德华逝世,享年89岁
  • 商务部回应美方加严限制中国芯片:敦促美方立即纠正错误做法