LC_560-和为K的连续子数组

题目描述

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的
连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

前缀和+哈希表

    public int subarraySum(int[] nums, int k) {
        int cnt = 0;//计数
        //初始化数组
        Map<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        int sum = 0;
        for (int i = 0; i <nums.length; i++) {
            sum+=nums[i];
            cnt+=map.getOrDefault(sum-k,0);
            map.put(sum,map.getOrDefault(sum,0)+1);
        }
        return cnt;
    }
posted @ 2020-05-29 22:17  Edwin_Xu  阅读(149)  评论(0编辑  收藏  举报