摘要: 其中哈希表中涉及一些辅助键值,只是为了问题的求解并没有什么特殊含义 1.求和相同的子数组 在逐步求前缀和的过程中记录每个值对应出现的次数。 如果在当前所算得前缀和pre减去之前算得的前缀和x正好等于目标值k。就直接加上前缀和x所对应的次数。 2.二元数组中求0,1数量相同的子数组 这本质上也是用前缀 阅读全文
posted @ 2024-02-28 15:07 yun-che 阅读(69) 评论(0) 推荐(0)
摘要: 一般给定的都是满二叉树,从后往前两个两个遍历,就可以实现递归。 本题中需要操作的左右孩子的差值,递归时就需要把孩子的信息也隐射到双亲节点中,也就是加上最大的孩子的值。 阅读全文
posted @ 2024-02-28 07:40 yun-che 阅读(13) 评论(0) 推荐(0)
摘要: 首先要将二叉树转换成图,再用bfs做。 1,二叉树转换成图 用哈希表存当前节点和与其相连的点; 通过当前节点于其父节点实现遍历; 点击查看代码 unordered_map<TreeNode*, vector<TreeNode*>> graph; void createGraph(TreeNode* 阅读全文
posted @ 2024-02-13 21:29 yun-che 阅读(27) 评论(0) 推荐(0)
摘要: 这道题关键突破点就是先算出节点总和,然后找到一颗子树总和最接近总和的一半。 乘积最大基本就是先要求总和,然后找到最接近总和一半。 关键就是这一步,找到最适合子树的和。 点击查看代码 if(abs(2*cur-sum)<abs(2*best-sum)){ best=cur; } 完整代码: 点击查看代 阅读全文
posted @ 2024-02-13 21:09 yun-che 阅读(17) 评论(0) 推荐(0)
摘要: 深度遍历,就是遍历: 1.先要确定有几种情况,像这道题,深度为1,2就是最基本的情况,分为两种处理; 2.根据不同情况,进行不同处理,不需要考虑后面递归的传递。 3.确认传递的方式,如果函数返回的是指针,就需要left,right接住。 完整代码: 点击查看代码 class Solution { p 阅读全文
posted @ 2024-02-12 21:18 yun-che 阅读(20) 评论(0) 推荐(0)
摘要: 数组包括vector容器。范围都是左闭右开。进行递归和遍历数组是要注意。 其中在递归时想传递压缩数组范围时就可以传递左右边界。 阅读全文
posted @ 2024-02-10 23:07 yun-che 阅读(44) 评论(0) 推荐(0)
摘要: 开始做的时候,就是单个字符这样想,看这个字符是否在当前字符串中。如果在就加入,不在就新建一个字符串,但发现这个思路是错的。 加入的字符改变的是当前字符串截至的位置,即使当前字符不在字符串中,但不意味着后面的字符就没有。 因此本题的关键就是先要找到每个字符的结束位置和每个字符串的结束位置,两个位置相等 阅读全文
posted @ 2024-01-28 15:43 yun-che 阅读(13) 评论(0) 推荐(0)
摘要: 这类题目一般是当前元素的位置既受前一个元素的影响又受后一个元素的影响。 题目一定是要确定一边之后,再确定另一边,例如比较每一个元素的左边,然后再比较右边,如果两边一起考虑一定会顾此失彼。 当确定一边后,就单独看排完序的数组,因为这时候只需考虑一边,因此容易找规律。 典型题目: 135. 分发糖果 点 阅读全文
posted @ 2024-01-28 10:22 yun-che 阅读(28) 评论(0) 推荐(0)
摘要: 最开始做这道题的时候没想到用这种方法,我之后也在想二分查找法什么时候能用。 其本质上还是在有序的范围中找到目标的数。这道题也就是要找到最大的合金数。 最基本的二分查找题目就是找到具体的那个数,等不等于那个数就是作为限制条件。 那这一题呢就是花费要小于限定值。 因此不断遍历每个机器找到所需花费,如果找 阅读全文
posted @ 2024-01-27 10:28 yun-che 阅读(19) 评论(0) 推荐(0)
摘要: 这种题目一般是给两个字符串,找一些特性或进行一些操作。 根据题目意思设置二维数组,行列长度为两个字数组的长度加1。之所以加一是为了留空间对空字符串进行讨论。 递推式就是两个数组中如果元素相等怎么样,不相等又怎么样。 最长公共子序列: 点击查看代码 if (text1[i - 1] == text2[ 阅读全文
posted @ 2024-01-23 12:55 yun-che 阅读(19) 评论(0) 推荐(0)