xqqlyx

560.和为 K 的子数组

题目

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

子数组是数组中元素的连续非空序列。

思路

计算数组前缀和,\(s[j]-s[i]=k\),转为\(s[j]-k=s[i]\),对于\(s[i]\)查找(两数之和哈希表思路)。

解法

class Solution {
    public int subarraySum(int[] nums, int k) {
        int n=nums.length;
        int[] s=new int[n+1];
        for(int i=0;i<n;i++){
            s[i+1]=s[i]+nums[i];
        }
        int ans=0;
        Map<Integer,Integer> cnt=new HashMap<>(n+1,1);
        for(int sj:s){
            ans+=cnt.getOrDefault(sj-k,0);
            cnt.merge(sj,1,Integer::sum);
        }
        return ans;
    }
}

posted on 2025-09-29 23:37  烫烫烫烫热  阅读(5)  评论(0)    收藏  举报