代码改变世界

[LeetCode] 560. Subarray Sum Equals K_Medium

2018-06-21 05:39  Johnson_强生仔仔  阅读(228)  评论(0编辑  收藏  举报

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].

 

这个题目思路是利用cumulative sum, 前面数字之和去计算. 参考Leetcode 原题Solution.

建一个diction, 记录 sum 出现过的次数, 然后每次用sum - target, 如果存在在dction里面, count += d[sum-target], 最后返回count. 如果直到这个思路之后其实不难, 否则还蛮难想的.

 

class Solution:
    def subarraySum(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
    
    d, count,s = {0:1}, 0,0  # 最开始有0:1 是因为"" 的sum是0, 所以初始为1
    for num in nums:
        s += num
        if s - k in d:
            count += d[s-k]
        if s not in d:
            d[s] = 1
        else:
            d[s] += 1

    return count