LeetCode Hot100 560.和为K的子数组

题目描述

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

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

560. 和为 K 的子数组 - 力扣(LeetCode)

思路

想象有一根很长的绳子(数组),你想从中间剪下一段(子数组),让这一段的长度正好是 k。

如果你知道从绳子开头到当前剪刀位置的总长度(presum),你只需要往回看:"之前有没有哪个位置,距离开头正好是 presum - k?"

如果能找到这样一个点,那么从那个点到当前点之间的这一段,长度就一定是 k。

只需要使用hashmap每次存储当前所有出现过的前缀和以及该前缀和出现的次数。

遍历数组,每次更新前缀和以后判断presum-k是否存在,如果存在则累加次数。然后将当前的presum加入hashmap

代码

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        HashMap<Integer,Integer> map =new HashMap<>();
        int res=0,presum=0;
        map.put(0,1);
        for(int num:nums){
            presum+=num;
            if(map.containsKey(presum-k)){
                res+=map.get(presum-k);
            }
            map.put(presum,map.getOrDefault(presum,0)+1);
        }
        return res;
    }
}
相关推荐
Ashore11_10 分钟前
蓝桥杯16届Java研究生组
java·算法·蓝桥杯
6Hzlia14 分钟前
【Hot 100 刷题计划】 LeetCode 76. 最小覆盖子串 | C++ 滑动窗口题解
c++·算法·leetcode
像素猎人17 分钟前
蓝桥杯OJ2049蓝桥勇士【动态规划】【dp[n]不是符合题意的答案,只是以an结尾的子问题的答案】
c++·算法·蓝桥杯·动态规划·区间dp
羊小猪~~18 分钟前
LLM--SFT简介
python·考研·算法·ai·大模型·llm·微调
广州灵眸科技有限公司30 分钟前
瑞芯微(EASY EAI)RV1126B 人脸98关键点算法识别
开发语言·科技·嵌入式硬件·物联网·算法·php
篮子里的玫瑰33 分钟前
FreeRTOS:信号量与互斥量在DMA串口发送中的实战剖析
stm32·单片机·嵌入式硬件·算法
hughnz34 分钟前
钻头技术持续突飞猛进:地热钻探领域的创新
人工智能·算法
xiaoye-duck41 分钟前
《算法题讲解指南:动态规划算法--子数组系列》--21.乘积最大子数组,22.乘积为正数的最长子数组
c++·算法·动态规划
MicroTech202541 分钟前
突破非幺正动力学瓶颈:MLGO微算法科技量子虚时演化赋能开放量子系统模拟
科技·算法·量子计算
Book思议-43 分钟前
【数据结构】二叉树非递归前中后序遍历详解
数据结构·二叉树非递归前中后序遍历