我试图理解以下代码背后的逻辑,但是我不清楚代码的 2 部分,因为目前支持逻辑的数学对我来说并不完全清楚。
困惑 1:我不明白为什么我们要在开始查找数组的总和之前将 0 和 count = 1 放在地图中?它有什么帮助?
困惑 2:如果我
map.put(sum, map.getOrDefault(sum)+1)
在 if() 条件之后移动,我会得到正确的解决方案。但是,如果我把它放在下面代码所示的地方,它会给我错误的结果。问题是为什么这个位置很重要,当我们在地图中搜索 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; }