class Solution:
"""
@param nums: a list of integer
@param k: an integer
@return: return an integer, denote the number of continuous subarrays whose sum equals to k
"""
def subarraySumEqualsK(self, nums, k):
# write your code here
prefix = [nums[i] for i in range(len(nums))]
for i in range(1, len(prefix)):
prefix[i] += prefix[i - 1]
value_to_times, ans = {0: 1}, 0
for i in range(len(prefix)):
if value_to_times.get(prefix[i] - k) != None:
ans += value_to_times[prefix[i] - k]
if value_to_times.get(prefix[i]) == None:
value_to_times[prefix[i]] = 1
else:
value_to_times[prefix[i]] += 1
return ans
Time O(n). Space O(n)>