Я пытаюсь понять логику следующего кода, однако я не совсем понимаю две части кода, потому что математика, поддерживающая логику, мне не совсем ясна в данный момент.
ЗАБЛУЖДЕНИЕ 1: я не понимаю, зачем нам ставить 0 с числом = 1 на карту, прежде чем мы начнем находить сумму массива? Как это помогает?
ЗАБЛУЖДЕНИЕ 2: если я передвину
map.put(sum, map.getOrDefault(sum)+1)
после условия if(), я получу правильное решение. Однако, если я помещу его в место, как показано в коде ниже, это даст мне неверный результат. Вопрос в том, почему позиция this имеет значение, когда мы ищем значение 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; }