leetcode 560. 和为 K 的子数组-java题解

题目所属分类

前缀和 哈希表

原题链接

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

代码案例:输入:nums = [1,1,1], k = 2
输出:2

题解

前缀和 然后哈希表中存放的是前缀和对应的个数 答案res中记录着每个前缀和sum[i] -k的个数

class Solution {
    
    
    public int subarraySum(int[] nums, int k) {
    
    
        int n = nums.length ;
        int[] sum = new int[n+1];
        for(int i = 1 ; i <= n ; i++){
    
    
            sum[i] = sum[i-1] + nums[i-1];
        }
         Map<Integer,Integer> hash = new HashMap<>();
         hash.put(0 , 1);
        int res =0 ;
        for(int i = 1; i <= n ; i++ ){
    
    
            res += hash.getOrDefault(sum[i] - k , 0);
            hash.put(sum[i] ,hash.getOrDefault(sum[i],0)+1);
        }
        return res ;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41810415/article/details/128771173