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))
相关推荐
tankeven4 分钟前
HJ162 ACM中的AC题
c++·算法
无尽的罚坐人生6 分钟前
hot 100 56. 合并区间
算法
kishu_iOS&AI8 分钟前
机器学习——归一化/标准化(特征工程预处理)
人工智能·算法·机器学习
励志的小陈16 分钟前
数据结构--带头双向循环链表(C语言实现)
c语言·数据结构·链表
美式请加冰17 分钟前
递归在二叉树搜索中的使用
算法
生信研究猿17 分钟前
leetcode 21.合并两个有序链表
python·leetcode·链表
nianniannnn38 分钟前
力扣 76. 最小覆盖子串
c++·算法·leetcode
灰色小旋风42 分钟前
力扣K个一组翻转链表C++
c++·算法·leetcode
北冥有羽Victoria1 小时前
TGC:深度时序图聚类的动态建模与时空平衡|ICLR 2024 深度解读
人工智能·python·算法·机器学习·支持向量机·聚类
manyikaimen1 小时前
博派智能-运动控制技术-RTCP-五轴联动
c++·图像处理·qt·算法·计算机视觉·机器人·c#