【发布时间】:2017-12-19 12:36:35
【问题描述】:
我们得到了一个整数数组和另一个数字k,我们需要找到总和等于k 的连续子数组的总数。我在 LeetCode 上发现了以下有趣的代码 sn-p:
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;
}
}
我喜欢高效的解决方案,因此我正在努力理解它;但是我有两个问题:
- 在HashMap中存储当前
sum及其frequency背后的直觉是什么? - 什么是我们检测到的子阵列是连续的保证?
示例输入:[1,1,1] 和 k=2;
输出:2
【问题讨论】:
-
更新 - 问题是here。