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))
相关推荐
咸鱼加辣6 小时前
“刻意强调” O(1)
数据结构·算法
南烟斋..6 小时前
Linux进程管理完全指南:创建、终止、回收与替换
linux·算法
点我头像干啥7 小时前
机器学习算法之动量法:优化梯度下降的“惯性”策略
人工智能·神经网络·算法·机器学习
XFF不秃头7 小时前
力扣刷题笔记-下一个排列
c++·笔记·算法·leetcode
Lv11770087 小时前
Visual Studio中Array数组的常用查询方法
笔记·算法·c#·visual studio
hn小菜鸡7 小时前
LeetCode 1306.跳跃游戏III
算法·leetcode·游戏
Swift社区7 小时前
LeetCode 450 - 删除二叉搜索树中的节点
算法·leetcode·职场和发展
长安er7 小时前
LeetCode 46/51 排列型回溯题笔记-全排列 / N 皇后
笔记·算法·leetcode·回溯·递归·n皇后
天赐学c语言7 小时前
12.16 - 全排列 && C语言中声明和定义的区别
c++·算法·leecode
LYFlied7 小时前
【每日算法】LeetCode 146. LRU 缓存机制
前端·数据结构·算法·leetcode·缓存