[Med Biptr] 560. Subarray Sum Equals K

Description

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

Solution

同向模板
T O(N^2)
S O(N)

public class Solution {
    public int subarraySum(int[] nums, int k) {
        int count = 0;
        int[] sum = new int[nums.length + 1];
        sum[0] = 0;
        for (int i = 1; i <= nums.length; i++)
            sum[i] = sum[i - 1] + nums[i - 1];
        for (int start = 0; start < nums.length; start++) {
            for (int end = start + 1; end <= nums.length; end++) {
                if (sum[end] - sum[start] == k)
                    count++;
            }
        }
        return count;
    }
}

Hashmap
首先求出nums的前缀和数组 (两个前缀和数组相减即可获得任意subarray)
然后将前缀和数组扫一遍,每扫到一个位置就将答案加上前面(k-prefixSum)出现次数(出现次数可以用dict维护)
再将当前前缀和prefixSum在出现的次数+1

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
        for i in range(1, len(nums)):
            nums[i] += nums[i - 1]
        d, ans = {0 : 1}, 0   #合为0的可以有一个(array为空时)
        for i in range(len(nums)):
            if(d.get(nums[i] - k) != None):  #找到!
                ans += d[nums[i] - k]
            if(d.get(nums[i]) == None):    
                d[nums[i]] = 1
            else:
                d[nums[i]] += 1
        return ans
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,448评论 0 10
  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,900评论 0 23
  • 有一条路,没有退路,只能向前。更有身边这些妈妈级的女性们在这不能后退的路上拼尽力气,只为尊严地生活...
    做个花农醉花间阅读 350评论 5 10
  • 今天抒下小情 ! 家乡冬季雪之乡。那块黑土地。 冬季,北方的代名词,雪,更是东北的特色 ! 为什么这么说呢?因为长...
    茗品人生阅读 967评论 25 24
  • 妈妈刚才在熬猪蹄汤,准备明天中午给你下面条吃。我知道你肯定依旧是吃不了俩口就不吃了,但我还是要弄给你吃,哪怕只是为...
    杨茗辞阅读 222评论 7 4