leetcode-560. 和为 K 的子数组

题目描述

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

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

示例 1:

复制代码
输入:nums = [1,1,1], k = 2
输出:2

示例 2:

复制代码
输入:nums = [1,2,3], k = 3
输出:2

思路

前缀和

参考:算法面试实录-和为 k 的子数组_哔哩哔哩_bilibili 这个视频讲的很清楚

1)变量pre用来记录前缀的累加和

2)字典记录:当前位置累加和出现的次数。PS:需初始化{0:1}

3)遍历数组,如果前缀和-k在字典中,count+=字典中的次数

python 复制代码
class Solution(object):
    def subarraySum(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        count = 0
        pre = 0
        pre_dict = {0:1}
        for num in nums:
            pre += num
            if pre - k in pre_dict:
                count += pre_dict[pre-k]
            if pre in pre_dict:
                pre_dict[pre] += 1
            else:
                pre_dict[pre] = 1
        return count

if __name__ == '__main__':
    s=Solution()
    nums = [1,2,3]
    k = 3
    print(s.subarraySum(nums, k))
相关推荐
寒秋花开曾相惜11 分钟前
(学习笔记)第四章 处理器体系结构
linux·网络·数据结构·笔记·学习
故事和你9138 分钟前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__41 分钟前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
脱氧核糖核酸__1 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode
王老师青少年编程2 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程2 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
_日拱一卒2 小时前
LeetCode:2两数相加
算法·leetcode·职场和发展
py有趣2 小时前
力扣热门100题之零钱兑换
算法·leetcode
董董灿是个攻城狮2 小时前
Opus 4.7 来了,我并不建议你升级
算法
自我意识的多元宇宙2 小时前
二叉树遍历方式代码解读(2迭代)
数据结构