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

 

posted @ 2023-06-02 16:33  乐乐章  阅读(10)  评论(0编辑  收藏  举报