560-Subarray-Sum-Equals-K
Last updated
Was this helpful?
Last updated
Was this helpful?
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
测试用例:
示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
本题求得是和为k的连续子数组的个数,对于一个子数组,假设有两个指针left与right,现在left所在位置的前缀和为A,right所在位置的前缀和为B,如果B—A=k,那么就说明我们找到了一组答案。我们只需要获得前缀和为A的连续子数组的个数,就可以确定和为K的子数组个数。这道题可以采用前缀和数组实现,但是我们并不需要直到每个前缀和的下标,我们只关心每个前缀和出现的次数,所以可以采用哈希表记录每种前缀和出现的个数。
对于每一个right指向的值,我们都计算前缀和B-K出现的次数,并更新新的前缀和。
但是一个需要注意的点就是前缀和的初始化,对于0位置的元素,其前缀和为0,个数为1,作为初始化数据加入map。map的定义如下:
key:前缀和 value:出现的次数
使用前缀、后缀等技巧时,一定要注意第一个元素的前缀(后缀)数据初始化。