方法一:暴力解法
var subarraySum = function(nums, k) {
let len = nums.length;
let num = 0;
for(let i=0;i<len;i++){
num+=get(nums,i,k,len);
}
return num;
};
function get(nums,idx,k,len){
let ans = 0;
let temp = 0;
while(idx<len){
temp+=nums[idx];
if(temp===k)ans++;
idx++;
}
return ans;
}
方法二:使用map优化这一题的实例真的离谱,比如[0,0,0,0,0,0,0,0,0,0]\n0
,每个零和前面的0都还能组成符合的字串。
var subarraySum = function(nums, k) {
let ans = 0;
let len = nums.length;
let set = new Map();
for(let i=0;i<len;i++){
if(i!==0)nums[i]+=nums[i-1];
if(nums[i]===k){
ans++;
}
if(set.get(nums[i]-k)){
ans+=set.get(nums[i]-k);
}
let temp = set.get(nums[i])===undefined?1:set.get(nums[i])+1
set.set(nums[i],temp);
}
return ans;
}