整数の配列と整数kを考えると、あなたは合計kに等しい連続サブアレイの最小サイズを見つけて、その長さを返す必要があります。
そのような部分配列が存在しない場合は、-1を返します。
例
例1
Input: nums = [1,1,1,2] and k = 3
Output: 2
例2
Input: nums = [2,1,-1,4,2,-3] and k = 3
Output: 2
通知
整数NUMS [i]が0よりも低くすることができます
溶液1:O(N ^ 2)TLE
パブリック クラスソリューション{ / ** * @paramのNUMS:整数のリスト * @paramのK:整数 * @return :和kに等しい連続サブアレイの最小長を表す、整数を戻す * / パブリック int型 subarraySumEqualsKIIを(INT []、NUMS int型K){ // ここにコードを記述は int型 []プレフィックス= 新しい INT [NUMS .LENGTH]。 以下のために(INT ; I <nums.length; iが0 = I ++ ){ 場合(I == 0 ){ 接頭辞[I] = NUMS [I]。 続け; } 接頭辞[I] =接頭辞[I - 1] + NUMS [I]。 } System.out.println(Arrays.toString(接頭辞)); int型のres = Integer.MAX_VALUEで、 以下のために(INT ; I <nums.length; iが0 = I ++ ){ ため(INT J = I; J <nums.length; J ++ ){ 場合(I == 0 ){ 場合(接頭辞[J] == k)は{ RES = Math.min(RES、J + 1 )。 } 続け; } もし(接頭辞[J] -接頭辞[I - 1] == k)は{ RES = Math.min(RES、J - I + 1 )。 } } } 戻る解像度== Integer.MAX_VALUEのか?-1 :RES。 } }
解決策2:
パブリック クラスソリューション{ / ** * @paramのNUMS:整数のリスト * @paramのK:整数 * @return :、合計kに等しい連続サブアレイの示す最小長整数を返す * / 公共 int型 subarraySumEqualsKIIを(int型 [] NUMS、int型のk){ // あなたのコードここに書く 地図<整数、整数>マップ= 新しいです HashMapの<> (); int型の合計= 0 ; int型のres = Integer.MAX_VALUEで、 map.put( 0、-1 ); 以下のために(INT ; I <nums.length; iが0 = I ++ ){ 和 + = NUMS [I]。 もし(map.containsKey(和- K)){ // 実際I取得- map.get(和- k)に対する1つの指標 RES = Math.min(RESを、I - map.get(和- K))。 } map.put(合計、I); } 戻る解像度== Integer.MAX_VALUEのか?-1 :RES。 } }