lxw124 / -Test

算法
1 stars 0 forks source link

leetcode560-和为k的子数组 #11

Open lxw124 opened 4 years ago

lxw124 commented 4 years ago

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

示例 1 :

输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

lxw124 commented 4 years ago

这道题可以用动态规划,设置一个数组dp,长度为nums.length,第i个值就为数组的前i项和,然后先寻找数组中有没有等于k的数,在寻找数组之间的差有没等于k的


var subarraySum = function(nums, k) {
       var dp=new Array(nums.length)
     dp[0]=nums[0]
     for(var i=1;i<nums.length;i++){
         dp[i]=nums[i]+dp[i-1]
     }
     var count=0;
     for(var i=0;i<dp.length;i++){
         if(dp[i]==k){count++}
     }
     for(var i=0;i<dp.length-1;i++){
         for(var j=i+1;j<dp.length;j++){
             if(dp[j]-dp[i]===k){
                 count++;
             }
         }
     }
 return count;
  }