整数の配列と別の数k
が与えられており、合計がk
に等しい連続するサブアレイの合計数を見つける必要があります。私はLeetCode上で、次の興味深いコードスニペットを見つけました:HashMapに合計と頻度を格納する直観
public class Solution {
public int subarraySum(int[] nums, int k) {
int count = 0, sum = 0;
HashMap < Integer, Integer > map = new HashMap < >();
map.put(0, 1);
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if (map.containsKey(sum - k))
count += map.get(sum - k);
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
return count;
}
}
私は効率的なソリューションが好きで、私はそれを理解しようとしています。しかし、私は2つの質問があります。
- をHashMapの中の現在
sum
とそのfrequency
を格納背後にある直感は何ですか? - 検出されたサブアレイが連続していることを保証するものは何ですか?
サンプル入力:[1,1,1]
およびk = 2
;
出力:2
更新 - 質問は[こちら](https://leetcode.com/problems/subarray-sum-equals-k/description/)です。 –