【LeetCode】560.和为K的子数组

题目

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

提示:

  • 1 <= nums.length <= 2 * 10^4
  • -1000 <= nums[i] <= 1000
  • -10^7 <= k <= 10^7

解答

源代码

class Solution {
    public int subarraySum(int[] nums, int k) {
        HashMap map = new HashMap<>();
        map.put(0, 1);
        int pre = 0, count = 0;

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

            if (map.containsKey(pre - k)) {
                count += map.get(pre - k);
            }

            map.put(pre, map.getOrDefault(pre, 0) + 1);
        }

        return count;
    }
}

总结

计算每个元素对应的前缀和,将前缀和出现的次数记录在哈希表中,当pre[j] - pre[i - 1] = k时,数组[i … j]即为和为k的数组,计数+1。

你可能感兴趣的:(LeetCode,leetcode,算法,java)