01 2024 档案
摘要:无重叠区间 这里的思路是找到有几个非重叠区间 然后总数减去非重叠区间就是剩下的重叠区间数 首先排好序 按左或者右都可以 这里按左排好 然后发现边界不重叠就++ 边界重叠 那么由于左边界优先对齐了 所以右边界更新 作为一个新的整体区间和下一个区间比较 划分字母区间 统计所有字母最后出现的位置 遍历数组
阅读全文
摘要:柠檬水找零 就根据几种条件列出来找零情况就行 生活经验可知 找零当然先给大面额的利于后面的找零 根据身高重建队列 这题感觉就是先做过队列给糖也难以有思路 这里是先按身高先排好队 一样身高就k小的排在前面 然后再按他前面有几个人直接就给他插到第几个位置就行 用最少数量的箭引爆气球 代码虽然很简单 但是
阅读全文
摘要:K 次取反后最大化的数组和 按照元素的绝对值大小进行排序 把绝对值大的且小于0的取反 如果还能取反 那么奇数次的话 就把绝对值小的取反 偶数次不用管 加油站 首先如果总油量小于总消耗是一定不能跑完的 这里的思路是如果[0,i]区间不能油量小于消耗 那么就尝试从下一个i+1的位置尝试 因为油量大于消耗
阅读全文
摘要:买卖股票的最佳时机 II 代码非常简单 但是想不到思路就比较难 这里是这样的逻辑 若在d4卖出 d1买入 获得收益 那么实际可以拆解成 d4-d3 + d3-d2 + d2-d1 也就是d4-d1 实际就是变成看明天减去今天收益是不是大于0就行 亏钱就不要 赚钱就要 跳跃游戏 一步步跟着跳 就是看现
阅读全文
摘要:分发饼干 这里的思路是 遍历饼干 小饼干喂小胃口的先 满足了小胃口的再接着满足大的 摆动序列 这题没有要求要输出子序列的话还是比较简单的 直接按照题目要求记录一下就行 其实没懂跟贪心有什么关系 或者如果要求输出子序列可以记录一下下标 然后copy下标到新数组也可以 最大子数组和 这里的思路是 如果当
阅读全文
摘要:重新安排行程 这个是关键 然后利用数组或者map记录映射关系 true or false记录飞没飞过 去重 因为起飞和落地都可能重复 有恰好tickets + 1个地点就行 这个代码比较贴近cpp的思路但是会超时 这个用map的比较节约时间 n皇后 难点在于模拟棋盘 数据处理 以及回溯算法能不能想到
阅读全文
摘要:非递减子序列 cpp就业还是太难了 还是转java吧 好歹这个对双非还友好一些 尝试写java的第一天 本题关键是理解非递减子序列判断条件 需要额外一个数组记录当前元素是否在本树层使用过 记录在这个数组就说明用过了 全排列 本题系统的演示了怎么写全排列 和最基本的组合问题的区别就是 这里遍历起始坐标
阅读全文
摘要:复原IP地址 本题确实比较有难度 主要很难一开始就发现切入点 虽然被提示了和切割字符串很像 还是看了题解 回溯部分重点就是怎么去切割这个ip地址 这里注意要尝试每个位置都去加'.'去分割 后面会回溯 由于是ip地址也就是提示了是四段式 并且利用isValid去判断是否合法 还有一些边界问题 isVa
阅读全文
摘要:组合总和 其实总的思路和前面几类组合问题区别不大 本题由于说明了元素可以重复选取 且无需考虑sum为0的情况 只需要把边界的startIndex迭代从i + 1 变成 i 即可 i表示可以选取元素本身 很容易写出以下未进行剪枝的代码 剪枝情况只是多了一种 也就是sum + 下一个候选元素 > tar
阅读全文
摘要:组合总和Ⅲ 跟组合总和Ⅰ很像 这里固定了是1-9的范围 而且确定了取k个数字 那么就是确定了树的高度和宽度 注意一下回溯的写法和边界条件就好 还有剪枝操作如下 其实就是当sum已经大于n 就不需要再进行了 电话号码的字母组合 这题就是一般的回溯问题 难点其实是在这投影怎么做 对cpp还是不太熟悉 不
阅读全文
摘要:组合 熟悉一下回溯算法的基本流程 以下是未曾进行剪枝处理的代码 为什么要进行剪枝呢 因为有一些情况是显然不可能成立的 如下 既然要取4个元素 那么当取了1个元素之后 集合剩余的元素不足4个 不可能满足要求 直接舍去 具体边界思考路径 剪枝代码如下
阅读全文
摘要:修剪二叉搜索树 这道题不能直接写删除代码 因为要涉及父子关系的保留 如 这样是暴力删掉不符合区间的节点 但是没有保留父子关系 这里我们把不符合区间的节点通过一个临时节点传递出来 然后在外面合适方向接住 具体怎么接住的呢 其实就是对于root来说 左边子树抛出的节点 就会在左边被接上 因为有个root
阅读全文
摘要:二叉搜索树的最近公共祖先 这题跟之前的不一样 可以利用二叉搜索树有序的特点 有序就说明可以根据节点的值与p q的关系判断应该往左边搜索还是右边搜索 这题显然是不需要遍历整棵树的 所以是写的遍历边的写法 遍历树需要用变量接受 二叉搜索树中的插入操作 一开始还以为要遍历整棵树 其实不需要 因为有序 所以
阅读全文
摘要:二叉搜索树的最小绝对差 二叉搜索树就是有序数组 那么转换一下就很简单了 也可以直接在遍历二叉搜索树的时候进行比较 需要一个指针记录前一个节点 二叉搜索树中的众数 既可以把这题的二叉搜索树当成一般树来做 这样就是层序遍历树然后用map记录频率 再取频率最高的值 这里用了中序遍历二叉搜索树 这样就是一个
阅读全文
摘要:最大二叉树 前序遍历 递归 效率不高 因为每次都要新开数组给左右子树 可以在同一个数组上做这个事情 合并二叉树 一开始不知道怎么同时遍历两棵树 其实只要同时传入两棵树的节点就可以了 这里判断两棵树谁空就另外一个作为构造树 全为空那就会构造空节点 二叉搜索树中的搜索 熟悉一下二叉搜索树的搜索流程 注意
阅读全文
摘要:找树左下角的值 最简单就是想到层序遍历之后取第一个位置元素就是了 递归的话需要先判断哪里最深的节点 至于最左 保持中左右的遍历顺序 第一次得到最大深度处就是最左的 路径总和 有点像查找子树路径 所以递归回溯是比较好的选择 在求路径的适合,targetSum - node->val 是否为0的判断比一
阅读全文
摘要:平衡二叉树 之前一直写迭代代码 没有怎么写递归 正好这题不是很好写迭代 练习一下递归 这题递归逻辑相对简单 左右子树高度差判断是不是大于一 可以直接返回结果 不大于一就高度max(l,r)+1 二叉树的所有路径 关键要点 这题适合先序遍历 回溯过程和递归过程是一起写的 进来几次就回溯几次 这样才能回
阅读全文
摘要:N 叉树的最大深度 这题昨天做过二叉版本 n叉区别不大 完全二叉树的节点个数 层级遍历 入que的数量就是节点个数
阅读全文
摘要:二叉树的层序遍历 基本的层序遍历 二叉树的层序遍历 II 感觉直接正常遍历之后反转是最简单的想法了 二叉树的右视图 一开始很难想到 其实只需要返回每层的最后一个节点就可以了 也就是i == size - 1 二叉树的层平均值 比较简单 注意一下变量是double N 叉树的层序遍历 模板题 注意容器
阅读全文
摘要:滑动窗口最大值 这题第一次见 比较难找到思路 滑动窗口的移动比较类似于队列的行为 但是我们需要找到其中的最大值 在线性时间复杂度下 只能维护这个队列保持单调性 但是我们没有这样的一个可以在移动中保持单调的数据结构 只能自己手动创建 我们利用deque进行队列的创建 这个队列有三个基本函数 pop 用
阅读全文
摘要:二叉树的节点的孩子数量称之为度 所有节点度为0或2的二叉树是满二叉树 完全二叉树是所有非叶节点都是度为2的节点 叶子都尽可能的靠左 前序遍历:中左右 中序遍历:左中右 后续遍历:左右中 这里左右中指的是当前节点的遍历顺序 中就是先遍历当前节点 再遍历子树 前序遍历递归代码: 中序遍历递归代码: 后序
阅读全文
摘要:有效括号 思路出来代码比较简单 左半括号出现就压右半进栈 这样比左右括号直接压进去 做的比较会少一些 栈为空但是还有符号出现或者是右半括号和当前元素对不上 显然为false 剩下的情况就是栈顶和当前元素匹配 pop即可 栈尤其适合做这类匹配类的题目 删除字符串中的所有相邻重复项 消消乐 直接压进栈做
阅读全文
摘要:栈模拟队列 大概了解一下思路自己就可以很快写出来了 我们需要第二个辅助栈帮助我们把stackIn的顺序颠倒,这样FILO的栈颠倒后 pop的顺序就和FIFO的队列顺序一致了 大概就是这张图 队列模拟栈 题目要求使用两个队列模拟栈 其实可以只需要一个队列就可以模拟 栈的出栈顺序是最后一个先出栈,那么队
阅读全文
摘要:比较难以理解 需要周日复盘 分割线 kmp算法的思想是 最大化利用已知的信息 与暴力穷举相比 kmp算法想通过已经查找的模式串的子串 与目标串进行匹配 而不是机械的重头开始匹配 因为明显有一些情况是可以舍去的 不可能的情况 一般模式串都会有一些特征 一些对称的特征可以利用 如果不是 那么kmp算法实
阅读全文
摘要:反转字符串 经典双指针法 头尾交换 反转字符串2 难点在于模拟题目设定的条件 一开始不明白怎么模拟 后来看了一行标准源码 就明白了 设定步长就可以了 然后对迭代器位置进行约束 替换数字 本题为acm模式 也是一道双指针解题 注意这道题需要扩容之后 从后往前填充 免去了从前往后填充时需要移动元素 单词
阅读全文
摘要:四数相加 题目需要找满足和为0的四元组 但是只要求统计个数 不要求具体的四元组 而且四元组是可以重复的 考虑使用hash map 由于设计到四个元素 先遍历两个集合 记录一下两个集合的元素和的所有可能值 记录在map中 为什么要用map 因为需要同时记录出现的值和出现的次数 值作为键 次数作为值 然
阅读全文
摘要:有效的字母异位词: 思路比较简单 由于范围比较小 只有小写字母为范围 利用26大小的数组 遍历字符串 第一个串在对应下标++ 第二个++ 然后数据存在不为零就是不一样的 不存在则时字母异位词 返回数组的交集 由于要返回的是交集 就是查找两个集合出现的元素 想到要使用hash map 具体的数据结构而
阅读全文