Loading...

【前缀和+哈希】LCR 010. 和为 K 的子数组

在这里插入图片描述

求解代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public int subarraySum(int[] nums, int k) {
        // 哈希表:key=前缀和,value=该前缀和出现的次数
        HashMap<Integer, Integer> map = new HashMap<>();

        int sum = 0; // 记录当前遍历到的前缀和
        int ans = 0;

        // 初始化前缀和为0的情况出现了1次
        map.put(0, 1);

        for (int i = 0; i < nums.length; i++) {
            sum += nums[i]; // 累加当前元素,得到当前前缀和sum

            // 查找是否存在sum - k,存在则累加次数到结果
            if (map.containsKey(sum - k)) {
                ans += map.get(sum - k);
            }

            // 将当前前缀和存入哈希表:若已存在则次数+1,否则设为1
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }
        return ans;
    }
最后更新于 2026-04-05 17:35:33
Code Road Record