560. Subarray Sum Equals K

Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.

Example 1:

Input:nums = [1,1,1], k = 2
Output: 2

Note:

  1. The length of the array is in range [1, 20,000].
  2. The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].

方法一:(参考:https://zhuanlan.zhihu.com/p/36439368

考点:prefixSum array

维护一个前缀字典 prefix = {},该字典里的 key 为一个前缀和,相应的 value 为该前缀和出现的次数。令 prefixSum 表示当前位置的前缀和,所以在每个位置我们都得到了以这个位置为结尾的并且和等于 k 的区间的个数,也就是 prefixSum - k 在前缀字典里出现的次数。注意需要设 prefix[0] = 1

 1 class Solution(object):
 2     def subarraySum(self, nums, k):
 3         """
 4         :type nums: List[int]
 5         :type k: int
 6         :rtype: int
 7         """
 8         cnt = 0
 9         prefixSum = 0
10         prefix = {}
11         prefix[0] = 1
12         for n in nums:
13             prefixSum += n
14             cnt += prefix.get(prefixSum - k, 0)
15             prefix[prefixSum] = prefix.get(prefixSum, 0) + 1 
16         return cnt 

 

转载于:https://www.cnblogs.com/alison-f/p/11386524.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值