从lc560“和为 K 的子数组“带你认识“前缀和+哈希表“的解题思路

1 前缀和+哈希表解题的几道题目:建议集中练习

java 复制代码
 560. 和为 K 的子数组:https://leetcode.cn/problems/subarray-sum-equals-k/
1248. 统计「优美子数组」: https://leetcode.cn/problems/count-number-of-nice-subarrays/
1249. 和可被 K 整除的子数组(利用同余定理):https://leetcode.cn/problems/subarray-sums-divisible-by-k/
1250. 连续的子数组和:https://leetcode.cn/problems/continuous-subarray-sum/

2 在树中利用"前缀和+哈希表"的解题思路 - "437. 路径总和 III" ?

LeetCode上有一道题目和"560. 和为 K 的子数组"在解法上非常类似,那就是"437. 路径总和 III"。这道题目是关于二叉树的,要求找到二叉树中和为K的路径的数量。其解法也是利用前缀和和哈希表。

2.1 疑惑

下面两个回溯代码有啥区别?

java 复制代码
    void dfs(TreeNode root, int t, Long sum){
        if(root==null)return;
        Long ns=sum+root.val;
        if(mp.containsKey(ns-t)){
            res+=mp.get(ns-t);
        }
        mp.put(ns,mp.getOrDefault(ns,0)+1);
        dfs(root.left,t,ns);
        // mp.put(ns,mp.get(ns)-1);
        dfs(root.right,t,ns);
        mp.put(ns,mp.get(ns)-1);
    }
java 复制代码
    void dfs(TreeNode root, int t, Long sum){
        if(root==null)return;
        Long ns=sum+root.val;
        if(mp.containsKey(ns-t)){
            res+=mp.get(ns-t);
        }
        mp.put(ns,mp.getOrDefault(ns,0)+1);
        dfs(root.left,t,ns);
        mp.put(ns,mp.get(ns)-1);
        dfs(root.right,t,ns);
        mp.put(ns,mp.get(ns)-1);
    }
相关推荐
爱吃生蚝的于勒18 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
数智工坊18 小时前
【数据结构-树与二叉树】4.6 树与森林的存储-转化-遍历
数据结构
望舒51319 小时前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
独好紫罗兰19 小时前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
铉铉这波能秀19 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
踢足球092919 小时前
寒假打卡:2026-2-8
数据结构·算法
老赵说19 小时前
Java基础数据结构全面解析与实战指南:从小白到高手的通关秘籍
数据结构
铉铉这波能秀20 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
静听山水20 小时前
Redis核心数据结构-ZSet
数据结构·redis
铉铉这波能秀20 小时前
LeetCode Hot100数据结构背景知识之字典(Dictionary)Python2026新版
数据结构·python·算法·leetcode·字典·dictionary