66.Subarray合計はK(Kは、サブアレイの数であり、及びA)に等しいです

レベル:

  中

件名の説明:

整数の配列と整数を考えるとKは、合計すると等しい連続サブアレイの総数見つける必要kは

例1:

Input:nums = [1,1,1], k = 2
Output: 2

注意:

  1. 配列の長さは、[20,000 1]の範囲内です。
  2. アレイ内の数字の範囲は[-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;
    }
}

おすすめ

転載: www.cnblogs.com/yjxyy/p/11097699.html