レベル:
中
件名の説明:
整数の配列と整数を考えるとKは、合計すると等しい連続サブアレイの総数見つける必要kは。
例1:
Input:nums = [1,1,1], k = 2
Output: 2
注意:
- 配列の長さは、[20,000 1]の範囲内です。
- アレイ内の数字の範囲は[-1000 1000]であり、整数の範囲kは [-1e7、1E7]です。
アイデアの分析:
連続サブアレイ解決和の数kの和を見つける必要が整数の配列及び数k、所与[I、J]は、目標の数、得られた和[0、i]との和[0 = j]は合計[I、J]を知ることができます。我々はすべての合計(0、I)= SUM(0、j)が必要なため - 和のK(0、i)を、その後、合計(0は、I1)= SUM(0、I2)、あなたは直接保存することができた場合値和(0、i)は、サブアレイカウント値の数に等しく、次に保存されたHashMapを使用します。
コード:
public class Solution{
public int subarraySum(int []nums,int k){
if(nums==null||nums.length==0)
return 0;
int res=0;
HashMap<Integer,Integer>map=new HashMap<>();//键保存sum(0,i),值表示其相同值出现的次数
map.put(0,1);
int sum=0;
for(int i=0;i<nums.length;i++){
sum=sum+nums[i]; //表示sum(0,j)
if(map.containsKey(sum-k)){
res=res+map.get(sum-k);
}
map.put(sum,map.getOrDefault(sum,0)+1);
}
return res;
}
}