算法 【前缀和+哈希】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; }