和为k的数组
这个思路一直想不到,参考了官方答案,哈希表记录[0,i]的和
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int result=0;
unordered_map<int, int>map;
int pre=0;//前缀和(前面的和)
map[0]=1;
for (int i = 0; i < nums.size(); i++)
{
pre+=nums[i];
if(map.find(pre-k)!=map.end())
{
result+=map[pre-k];
}
map[pre]++;
}
return result;
}
};
/*
超时
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int count=0;
for (int i = 0; i < nums.size(); i++)
{
int sum=0;
for(int j=i;j>=0;j--)
{
sum+=nums[j];
if(sum==k)
count++;
}
}
return count;
}
};
*/