题目链接:https://leetcode.com/problems/subarray-sum-equals-k/#/description
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
Example 1:
Input:nums = [1,1,1], k = 2 Output: 2
思路:
用sum表示从数组开始位置到当前位置的数字相加和,我们还可以用Hash Table来存储sum出现的次数,如果当前位置之前有相加和为sum-k的位置,则这两个位置之间的数字相加和为k,以当前位置结尾的相加和为k的子数组个数为hash[sum-k],这样遍历整个数组即可得出满足条件的子数组个数。
class Solution{
public:
int subarraySum(vector<int>& nums,int k)
{
int sum=0,cnt=0;
unordered_map<int,int> hash;
hash[0]=1;
for(int i=0;i<nums.size();i++)
{
sum+=nums[i];
cnt+=hash[sum-k];
hash[sum]++;
}
return cnt;
}
};