随笔分类 - LeetCode刷题总结
摘要:一般情况下, 关于推导dp数组, 有两种推导思路 1 通过dp数组直接存储目的值的方式, 每一个推导都是为了求出本层的目的值 (这种情况下, 可能待存储属性具有多种状态, 但是我们只考虑其中一种状态, 这种情况之下, 往往dp数组是一维的, 数组的最后一个数据就是我们要求的目的值. 2 通过dp数组
阅读全文
摘要:1 深度优先遍历的应用: (1) 联通分量的确定 (对每一个节点都进行深度优先遍历, 如果没有被遍历到的话) (2) 路径问题(单源路径) (深度优先遍历时, 每次向下深入一个节点, 就往map中存入这条路径信息) (3) 环检测 (深度优先遍历, 遇到重复点就代表有环) (4) 二分图检测 (染色
阅读全文
摘要:1 这个技巧是: 在相同树层进行遍历的时候, 有可能这个遍历的顺序并不是正常的从1-n进行遍历, 而是从剩余的元素中选择一个最符合条件的优先进行遍历, 但是还必须保证所有的元素都要被遍历到 所以, 想了一种方法, 我们仍然是按照从1-n的位置顺序进行遍历, 但是我们记录一个tempIndex(当前位
阅读全文
摘要:1 为什么要提出这个问题呢, 主要是源自于我发现了自己总是喜欢纠结于一些东西, 从来不想做选择, 只想要一个确定精确的唯一答案 2 做题过程中发现, 在回溯算法与递归算法中, 收集元素后拥有两个比较好的时机 (1) 一个时机是在横向遍历的时候, 先把元素是否符合条件判断好, 如果符合条件, 直接进行
阅读全文
摘要:1 我们经常会遇到这样一种情况, 我们的目的是收集若干个符合条件的元素的组合, 但是由于元素有可能会重复, 所以, 我们收集到的组合也有很大的可能会重复. 但是我们要求获得的组合不能允许有重复, 这就要牵扯到去重的操作 2 对于去重, 我们的第一想法就是, 先把所有可能的情况进行收集, 然后再在所有
阅读全文
摘要:GET{ 方法(){ 1 这一题, 也是回溯法组合类问题的典型题目 2 但是通过这一题, 又可以发现自身一个很大的问题, 那就是做题之前没有规划好题目的解题流程, 导致真正写代码解题时, 哪里漏了补哪里, 但是往往补了东墙西墙破, 再也无法大局观 3 所以, 我们解题之前, 一定要规划好解题流程,
阅读全文
摘要:GET{ 方法(){ 1 这一题是回溯算法的第一类经典题目, 组合问题 2 回溯法出现的原因是: 其实本没有回溯法, 有的只是递归, 回溯法出现只是因为递归的过程中为了收集元素, 使用了一个共同的容器, 由于本次收集的结果会影响下一次收集的结果, 所以, 我们需要在本次收集完结果并进行收集完结果进行
阅读全文
摘要:GET{ 注意点(){ 1 自己在做题时, 往往是想通用性的解答方式, 考虑了一些更加特殊的情况, 这一点可能很好, 但是, 需要注意的是, 如果我们只是专注于解题, 那么只需要考虑把题目做出来就可以了, 利用好题目的提示以及考虑范围 如果是在进行总结性的学习并且在总结套路的话, 那么就需要把所有的
阅读全文
摘要:1 遇到二叉树树相关的题目, 第一想到的应该就是递归, 无二叉树不递归, 每一个递归模型都可以抽象成一个二叉树模型 2 我们都应该知道, 二叉树的节点应该有两个节点, 分别是左子节点和右子节点, 如果一个节点的一边的子节点已经不存在了, 那就没有继续递归的必要了 3 所以, 递归终止条件的判断依据就
阅读全文
摘要:GET{ 方法论(){ 通过这一道题目了解到前序遍历结果集与后序遍历结果集之间的关系, 即: 前序遍历结果集中的第一个元素一定是这颗二叉树的最顶级父元素, 通过这个元素对中序遍历结果集进行分割, 左边的部分是这个元素的左子树的中序遍历结果, 右边部分是这个元素的右子树的中序遍历结果 通过左子树的中序
阅读全文
摘要:GET{ 方法论(){ 通过这一道题目了解到中序遍历结果集与后序遍历结果集之间的关系, 即: 后序遍历结果集中的最后一个元素一定是这颗二叉树的最顶级父元素, 通过这个元素对中序遍历结果集进行分割, 左边的部分是这个元素的左子树的中序遍历结果, 右边部分是这个元素的右子树的中序遍历结果 通过左子树的中
阅读全文