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:
The length of the array is in range [1, 20,000].
The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].
思路,可以用一个map或dict这种数据结构,假设数组nums[i]的前i个数的和为sum, 那假设前j个数的和为sum1(j<i), 且sum=sum1+k, 那说明nums(j:i]的连续和为k, 由于dict中查找一个值得时间复杂度可以看成是O(1),故总的时间复杂度可以看成是O(n).
def subarraySum(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
a=collections.Counter()
a[0]=1
res=0
sum=0
for i in range(len(nums)):
sum+=nums[i]
res+=a[sum-k] #到第i个数的连续和为k的个数
a[sum]+=1
return res