560. 和为 K 的子数组

思路

本题的主要思路为创建一个哈希表记录每个0~i的和 ,在遍历这个数组的时候查询有没有sum-k的值在哈希表中,如果有,说明有个位置到当前位置的和为k。

有可能不止一个,哈希表负责记录有几个sum-k,将和记录下来。这里把每个以i结尾的结果都算上了,所以不用担心不全等问题。

这里需要注意的两个点为:

  1. m[0]=1;提前在哈希表注册一个0的结果,因为如果刚好是0到当前i的话,需要有一个记录被算上。
  2. m[sum]++这行代码放的位置,有个简单的方法来判断会不会影响当前i计算的结果,那就是加到当前的和为0,k也为0,如果你放在前面的话就会算上这个结果,但是当前i到当前i是没有元素的,不算一种结果,但是你加上了这个结果,是错误的,有影响的。

代码示例

go 复制代码
func subarraySum(nums []int, k int) int {
    result:=0
    m:=make(map[int]int)
    m[0]=1
    sum:=0
    for i:=0;i<len(nums);i++{
        sum+=nums[i]
        if val,ok:=m[sum-k];ok{
            result+=val
        }
        m[sum]++
    }

    return result
}
相关推荐
Yzzz-F1 分钟前
牛客周赛round123 G小红出千[补题][滑动窗口]
算法
肆悟先生19 分钟前
3.16 含有可变参数的函数
c++·算法
步步为营DotNet23 分钟前
深度解析.NET中属性(Property)的幕后机制:优化数据访问与封装
java·算法·.net
Swift社区24 分钟前
LeetCode 454 - 四数相加 II
java·算法·leetcode
tokepson26 分钟前
反向传播
深度学习·算法·ai·反向传播
Xの哲學33 分钟前
Linux AQM 深度剖析: 拥塞控制
linux·服务器·算法·架构·边缘计算
艾醒37 分钟前
大模型原理剖析——突破LLM效率瓶颈:多标记预测(MTP)技术深度解析与实战
算法
智驱力人工智能37 分钟前
森林防火无人机火焰监测系统 构建“天空地”一体化智能防火体系 无人机火焰检测,支持红色火焰检测 城市高层建筑无人机火焰识别
人工智能·深度学习·opencv·算法·目标检测·无人机·边缘计算
多米Domi01138 分钟前
0x3f第12天 0-1背包
python·算法·leetcode·动态规划
Bruce_kaizy44 分钟前
c++图论————最短路之Floyd&Dijkstra算法
c++·算法·图论