560. 和为 K 的子数组
思路
难度中等
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的连续子数组的个数 。
示例 1:
输入:nums = [1,1,1], k = 2 输出:2
示例 2:
输入:nums = [1,2,3], k = 3 输出:2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
class Solution: def subarraySum(self, nums: List[int], k: int) -> int: ## 构造前缀和数组 presum = [0] cursm = 0 for num in nums: cursm+=num presum.append(cursm) ### 前缀和数组中求 num-k 在数组中出现的次数 cnt = 0 dd = collections.defaultdict(int) for i in range(0,len(presum)): num = presum[i] if num-k in dd: cnt+=dd[num-k] dd[num] += 1 return cnt