力扣题库第10题:和为K的子数组

题目:

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2

答案:

# coding:utf-8
# 时间:2024/3/15 13:57
# Pythonit教程网(blog.pythonit.cn)
# Python全栈视频课件获取:www.dqu.cc
# 加速高防cdn:woaiyundun.cn
def subarraySum(nums, k):
    prefix_sum = {0: 1}  # 初始化哈希表,前缀和为0的次数为1
    count = 0  # 初始化满足条件的子数组个数为0
    current_sum = 0  # 初始化当前位置之前的元素和为0

    for num in nums:
        current_sum += num  # 更新当前位置之前的元素和
        if current_sum - k in prefix_sum:
            count += prefix_sum[current_sum - k]  # 如果存在键为current_sum - k的项,则加到count上
        prefix_sum[current_sum] = prefix_sum.get(current_sum, 0) + 1  # 更新哈希表中当前前缀和的次数

    return count
nums = [1, 1, 1]
k = 2
print(subarraySum(nums, k))  # 输出: 2  

nums = [1, 2, 3]
k = 3
print(subarraySum(nums, k))  # 输出: 2
力扣题库

我来吐槽

*

*