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
}
相关推荐
Ldawn_AI2 小时前
4+ 图论高级算法
算法·深度优先·图论
Xの哲學2 小时前
Linux PCI 子系统:工作原理与实现机制深度分析
linux·网络·算法·架构·边缘计算
NuyoahC3 小时前
笔试——Day46
c++·算法·笔试
Keying,,,,4 小时前
力扣hot100 | 图论 | 200. 岛屿数量、994. 腐烂的橘子、207. 课程表、208. 实现 Trie (前缀树)
算法·leetcode·图论
啊吧怪不啊吧4 小时前
C++之list类的代码及其逻辑详解 (中)
开发语言·数据结构·c++·list
cwplh5 小时前
Codeforces1043 A至F 题解
算法
楼田莉子5 小时前
C++算法学习专题:滑动窗口
开发语言·数据结构·c++·学习·算法·leetcode
2501_924731115 小时前
智慧矿山误报率↓83%!陌讯多模态融合算法在矿用设备监控的落地优化
人工智能·算法·目标检测·视觉检测
zh_xuan6 小时前
LeeCode 40.组合总和II
c语言·数据结构·算法
都叫我大帅哥7 小时前
动态规划:从懵逼到装逼,一篇让你彻底搞懂DP的终极指南
java·算法