7月28日:和为K的连续子数组

题目如下:

7月28日:和为K的连续子数组

题目看着不难,然后我第一个想到的就是暴力解法,直接双重循环。但是发现速度确实挺慢的,所以就看了一下官方的题解。

7月28日:和为K的连续子数组

我的理解是:新建一个hashmap,然后遍历数组,并将数组累加,将累加的结果放入hashmap中,如果hanshmap中存在当前累加减去目标数,则说明存在一个和为K的子数组。

class Solution {

   public int subarraySum(int[] nums, int k) {

        if(nums==null||nums.length==0) return 0;

        Map<Integer,Integer> hashmap = new HashMap<>();

        int sum = 0;

        int count = 0;

        hashmap.put(0,1);

        for(int i=0;i<nums.length;i++){

            sum = sum + nums[i];

            if(hashmap.containsKey(sum-k)){

                count=count + hashmap.get(sum-k);

            }

            hashmap.put(sum,hashmap.getOrDefault(sum,0)+1);

        }

        return count;

    }

}