题目

方法一:暴力解法

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;
}