链接:560. 和为 K 的子数组 - 力扣(LeetCode)
1.搞一个新数组sums,记录的是从第一个数到第i个数所有数之和。这样的话两数相减得到的结果就是对应子串和
2.要再节省时间一点就用哈希表存前面的sums的对应值的数字,这样最终只要O(N)
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 length = len(nums) 9 sums = [] 10 sums.append(nums[0]) 11 i = 1 12 while i < length: 13 sums.append(nums[i]+sums[i-1]) 14 i += 1 15 help_dict = {} 16 i = 0 17 res = 0 18 while i < length: 19 if (sums[i] - k) in help_dict: 20 res += help_dict[sums[i] - k] 21 if sums[i] == k: 22 res += 1 23 if(sums[i] in help_dict): 24 help_dict[sums[i]] += 1 25 else: 26 help_dict[sums[i]] = 1 27 i += 1 28 return res 29 30