【发布时间】:2021-01-07 23:25:14
【问题描述】:
我正在尝试理解以下代码背后的逻辑,但是我不清楚代码的两个部分,因为目前支持该逻辑的数学对我来说并不完全清楚。
-
CONFUSION 1:我不明白为什么我们要在开始查找数组的总和之前将 0 和 count = 1 放在地图中?它有什么帮助?
-
CONFUSION 2:如果我在 if() 条件之后移动
map.put(sum, map.getOrDefault(sum)+1),我会得到正确的解决方案。但是,如果我把它放在下面代码所示的地方,它会给我错误的结果。问题是为什么这个位置很重要,当我们在地图中搜索 sum-k 的值以找到计数时public int subarraySum(int[] nums, int k) { HashMap<Integer,Integer> prefixSumMap = new HashMap<>(); prefixSumMap.put(0, 1); // CONFUSION 1 int sum = 0; int count = 0; for(int i=0; i<nums.length; i++) { sum += nums[i]; prefixSumMap.put(sum, prefixSumMap.getOrDefault(sum, 0)+1); //CONFUSION 2 if(prefixSumMap.containsKey(sum - k)) { count += prefixSumMap.get(sum - k); } } return count; }
【问题讨论】:
标签: java math hashmap prefix-sum