从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);
    }
相关推荐
gumichef9 小时前
算法的时间复杂度和空间复杂度
数据结构
cpp_250110 小时前
P1832 A+B Problem(再升级)
数据结构·c++·算法·动态规划·题解·洛谷·背包dp
꧁细听勿语情꧂10 小时前
合并两个有序表、判断链表的回文结构、相交链表、环的链表一和二
c语言·开发语言·数据结构·算法
大肥羊学校懒羊羊11 小时前
完数与盈数的计算题解
数据结构·c++·算法
无限进步_13 小时前
C++ 继承机制完全解析:从基础原理到菱形继承问题
java·开发语言·数据结构·c++·vscode·后端·算法
不知名的忻13 小时前
并查集(QuickUnion)
java·数据结构·算法·并查集
数智化精益手记局13 小时前
仓库安灯管理系统的异常响应机制:破解仓库安灯管理系统的跨部门协同难题
大数据·数据结构·人工智能·制造·精益工程
小张成长计划..14 小时前
【C++】25:哈希表的实现
数据结构·哈希算法·散列表
米啦啦.14 小时前
B-树,,
数据结构·b树·b-树
shy^-^cky14 小时前
文件的逻辑结构+ 物理结构
数据结构·操作系统·文件·数据·逻辑结构·物理结构·文件结构