代码随想录训练营
MoonBlue:)
还有100多天就能毕业啦!!
展开
-
代码随想录算法训练营第五十七天| 647. 回文子串 516.最长回文子序列
回文子串是要连续的,回文子序列可不是连续的!原创 2023-06-02 20:59:33 · 345 阅读 · 0 评论 -
代码随想录算法训练营第五十五天|583. 两个字符串的删除操作 72. 编辑距离
文章目录583. 两个字符串的删除操作思路代码总结72. 编辑距离思路代码总结583. 两个字符串的删除操作思路代码class Solution {public: int minDistance(string word1, string word2) { vector<vector<int>> dp(word1.size() + 1, vector<int>(word2.size() + 1)); for (int i =原创 2023-06-02 20:44:38 · 281 阅读 · 0 评论 -
代码随想录算法训练营第五十四天|392.判断子序列 115.不同的子序列
文章目录392.判断子序列思路代码总结115.不同的子序列思路代码总结392.判断子序列思路代码class Solution {public: bool isSubsequence(string s, string t) { vector<vector<int>> dp(s.size()+1, vector<int> (t.size() + 1,0)); for(int i = 1; i <= s.size(); i原创 2023-06-02 20:36:56 · 423 阅读 · 0 评论 -
代码随想录算法训练营第五十三天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和动态规划
本题说是求绘制的最大连线数,其实就是求两个字符串的最长公共子序列的长度!原创 2023-06-02 20:21:48 · 451 阅读 · 0 评论 -
代码随想录算法训练营第五十一天|309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
public :// 持股票 for(int i = 1;i < n;i ++) {} };intpublic :// 持股票 for(int i = 1;i < n;i ++) {} };相应状态减去手续费。原创 2023-06-01 21:41:17 · 343 阅读 · 0 评论 -
代码随想录算法训练营第五十天|123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV
文章目录123.买卖股票的最佳时机III思路代码总结188.买卖股票的最佳时机IV思路代码总结123.买卖股票的最佳时机III思路代码class Solution {public: int maxProfit(vector<int>& prices) { if(prices.size() == 0) return 0; vector<vector<int>> dp(prices.size(), vector<原创 2023-06-01 20:47:50 · 190 阅读 · 0 评论 -
代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机 122.买卖股票的最佳时机II
i ++) {} };i ++) {} };这正是因为本题的股票可以买卖多次!,所以。原创 2023-06-01 20:30:55 · 70 阅读 · 0 评论 -
代码随想录算法训练营第四十八天|198.打家劫舍 213.打家劫舍II 337.打家劫舍III
i ++) {} };原创 2023-06-01 17:38:44 · 221 阅读 · 0 评论 -
代码随想录算法训练营第四十六天|139.单词拆分
文章目录139.单词拆分思路代码总结139.单词拆分思路代码class Solution {public: bool wordBreak(string s, vector<string>& wordDict) { unordered_set<string> wordSet (wordDict.begin(), wordDict.end()); vector<bool> dp(s.size() + 1, false原创 2023-06-01 16:52:24 · 89 阅读 · 0 评论 -
代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数
j ++) {} };原创 2023-06-01 10:39:14 · 337 阅读 · 0 评论 -
代码随想录算法训练营第四十四天|完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ
在求装满背包有几种方案的时候,认清遍历顺序是非常关键的。如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。原创 2023-05-30 17:02:45 · 257 阅读 · 0 评论 -
代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II 494. 目标和 474.一和零
如果使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒序遍历!本题要如何使表达式结果为target,既然为target,那么就一定有 left组合 - right组合 = target。left + right = sum,而sum是固定的。公式来了, left - (sum - left) = target 推导出 left = (target + sum)/2。target是固定的,sum是固定的,left就可以求出来。原创 2023-05-30 11:36:25 · 77 阅读 · 0 评论 -
代码随想录算法训练营第四十一天|343. 整数拆分 96.不同的二叉搜索树
有点绕一开始自己推的公式想得太简单了。原创 2023-05-24 22:48:34 · 69 阅读 · 0 评论 -
代码随想录算法训练营第三十九天| 62.不同路径 63. 不同路径 II
组合数学方法里处理溢出的代码比较复杂空间优化版本的代码是使用了滚动数组。原创 2023-05-24 17:07:26 · 209 阅读 · 0 评论 -
代码随想录算法训练营第三十八天|理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
有解题框架的题比贪心好理解一些。。。自己想状态转移公式好难啊。原创 2023-05-24 11:15:48 · 862 阅读 · 0 评论 -
代码随想录算法训练营第三十七天|738.单调递增的数字 968.监控二叉树
这题比较有特点。感觉第一次写很难想到。原创 2023-05-23 22:54:56 · 70 阅读 · 0 评论 -
代码随想录算法训练营第三十六天| 435. 无重叠区间 763.划分字母区间 56. 合并区间
在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。另一种思路:统计字符串中所有字符的起始和结束位置,记录这些区间(实际上也就是435.无重叠区间题目里的输入),将区间按左边界从小到大排序,找到边界将区间划分成组,互不重叠。找到的边界就是答案。思路不难重叠区间的问题:找边界,但是按左边界排序和按右边界排序一定要确定好。画图辅助。原创 2023-05-23 21:29:57 · 112 阅读 · 0 评论 -
代码随想录算法训练营第三十五天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
写的时候很顺利,其实没想到这么多。看完题解才明白为什么一定要这样写因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。注意选择的数据结构对算法性能的影响思路是对的,但是写起来就不行了,还是要多练!!!!原创 2023-05-23 17:02:02 · 649 阅读 · 0 评论 -
代码随想录算法训练营第三十四天|1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
不难。还是要分析情况,细分局部最优这一题没怎么明白。原创 2023-05-22 22:04:50 · 90 阅读 · 0 评论 -
代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点贪心的代码不一定特别复杂,重点在于思路(对于全局最优的分解)这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。真的就是没什么联系,因为贪心无套路!没有个整体的贪心框架解决一系列问题,只能是接触各种类型的题目锻炼自己的贪心思维!原创 2023-05-22 17:00:30 · 63 阅读 · 0 评论 -
代码随想录算法训练营第三十一天|理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
题目比较简单,思路也容易想到,但是在写的时候根本都没感到使用了贪心(这应该就是为什么说贪心是下意识理解题目的贪心贪的是哪里呢?如果 -2 1 在一起,计算起点的时候,一定是从 1 开始计算,因为负数只会拉低总和,这就是贪心贪的地方!原创 2023-05-22 15:32:24 · 149 阅读 · 0 评论 -
代码随想录算法训练营第三十天|332.重新安排行程 51. N皇后 37. 解数独
看题解不难,但是自己就是写不出来!!😦比不同目的地那题好理解一些n皇后是单层递归(for循环遍历每一行),数独是双层递归(遍历行、遍历列)原创 2023-05-22 11:20:07 · 457 阅读 · 0 评论 -
代码随想录算法训练营第二十九天|491.递增子序列 46.全排列 47.全排列 II
第二行的条件语句 uset.find(nums[i])!= uset.end() 检查 uset 容器中是否存在 nums[i] 这个元素。uset.find(nums[i]) 会返回一个迭代器,指向 nums[i] 元素在 uset 容器中的位置,如果元素不存在,则返回 uset.end()。因此,uset.find(nums[i])!= uset.end() 的结果为真表示 nums[i] 在 uset 容器中已经存在。原创 2023-05-22 09:32:31 · 434 阅读 · 0 评论 -
代码随想录算法训练营第二十八天|93.复原IP地址 78.子集 90.子集II
大部分优化都在for循环中的剪枝操作子集是收集树形结构中树的所有节点的结果。而组合问题、分割问题是收集树形结构中叶子节点的结果。(处理区别可以看代码注释)排序很重要!又很容易忘记,每次都忘记写!去重就一定要排序!!原创 2023-05-21 20:58:45 · 366 阅读 · 0 评论 -
代码随想录算法训练营第二十七天|39. 组合总和 40.组合总和II131.分割回文串
在求和问题中,排序之后加剪枝是常见的套路!直接用startIndex来去重也是可以的, 就不用used数组了。剩下一个数组的空间注意排序树层去重与树枝去重的区别优化版的回文操作是动态规划问题,虽然理解意思了,但是不太会代码细节中有很多重点,但是写的时候没感觉到?原创 2023-05-21 16:38:58 · 847 阅读 · 0 评论 -
代码随想录算法训练营第二十三天|669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
关于接住下一层节点的部分有点绕public :pre = 0;} };原创 2023-05-19 21:57:11 · 91 阅读 · 0 评论 -
代码随想录算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合
画图后分析剪枝会更清晰具体实现有点绕注意这里for循环,可不像是在回溯算法:求组合问题和回溯算法:求组合总和中从startIndex开始遍历的。因为本题每一个数字代表的是不同集合,也就是求不同集合之间的组合,而77. 组合和216.组合总和III都是求同一个集合中的组合!每一层都是在一个新集合里搜索注意:输入1 * #按键等等异常情况。代码中最好考虑这些异常情况,但题目的测试数据中应该没有异常情况的数据,所以我就没有加了。但是要知道会有这些异常,如果是现场面试中,一定要考虑到!原创 2023-05-19 17:26:31 · 233 阅读 · 0 评论 -
代码随想录算法训练营第二十四天|理论基础 77. 组合
按照回溯模板写会比较有逻辑,之前写递归时,也是按照步骤写还可以做剪枝操作(看了但没实际改),具体剪枝操作根据题目来。原创 2023-05-19 11:20:04 · 434 阅读 · 0 评论 -
代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
普通二叉树找公共父节点是葱底向上,二叉搜索树是从上向下,二叉搜索树自身的性质会帮助解题删除节点的难点在于当被删除节点的左右子节点都不为空时,要做一个旋转的操作第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。这题涉及到改结构,比较绕,需要及时复习。原创 2023-05-18 22:32:29 · 299 阅读 · 0 评论 -
代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
迭代法对我来说会更难记忆一些遇到在二叉搜索树上求什么最值,求差值之类的,都要思考一下二叉搜索树可是有序的,要利用好这一特点。sort方法用自定义的比较方式:首先写一个cmp方法,利用二叉搜索树的特点更高效求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。原创 2023-05-18 21:08:06 · 337 阅读 · 0 评论 -
代码随想录算法训练营第二十天|654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
代码随想录说是建议不要new新的vec,但是用下标写窝好混乱。。。二叉搜索树本身有序的结构会规划好搜索的路线含义:试图使用空指针 解决方法:增加判断存在条件注意元素相同时候也要返回false。原创 2023-05-18 11:24:34 · 55 阅读 · 0 评论 -
代码随想录算法训练营第十八天| 513.找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
递归函数什么时候需要返回值?什么时候不需要返回值?这里总结如下三点:a. 如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(这种情况就是本文下半部分介绍的113.路径总和ii)b. 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。(这种情况我们在236. 二叉树的最近公共祖先c. 如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。(本题的情况)累加变累减。原创 2023-05-16 22:00:46 · 52 阅读 · 0 评论 -
代码随想录算法训练营第十七天|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和
迭代法还需要梳理回溯有点不太熟练,需要复习。原创 2023-05-16 10:22:53 · 47 阅读 · 0 评论 -
代码随想录算法训练营第十六天|104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
递归层序遍历层序遍历方法在Day 15的相似十题中写过了完全二叉树中包含满二叉树位运算:https://zhuanlan.zhihu.com/p/390085789 https://www.zhihu.com/question/38206659在完全二叉树代码中,代表,所以Deph初始值为0,这样最终计算出来的结果是。原创 2023-05-15 11:37:17 · 248 阅读 · 0 评论 -
代码随想录算法训练营第十五天|10 层序遍历 226.翻转二叉树 101.对称二叉树2
注意栈、队列为空的情况另写类似十题(√)递归中序不行(画图)是因为,比如递归到root时,交换左右子树,然后根据中序原理,要继续遍历root的右子树了,但此时的右子树已经是交换后的、原本的左子树了,所以会重复交换,而原先的右子树没有被遍历到。原创 2023-05-15 10:13:59 · 79 阅读 · 0 评论 -
代码随想录算法训练营第十四天| 终于到二叉树了!
但是前序后序与中序的操作不一样,不是一个统一的思路,中序的节点访问顺序和处理顺序不一样。种类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树。深度优先搜索:前中后序遍历。广度优先搜索:层序遍历。存储方式:链式、线式。原创 2023-05-05 15:20:03 · 53 阅读 · 0 评论 -
代码随想录算法训练营第十二天|239 滑动窗口最大值 347 前 K 个高频元素
单调队列的设计思路需要记忆:维护队列中重点关注的元素,并维护队列中的顺序STL!!!原创 2023-05-04 21:20:03 · 373 阅读 · 0 评论 -
代码随想录算法训练营第十一天|20 有效的括号 1047 删除字符串中所有相邻重复项 150 逆波兰表达式求值
分析题目很重要,不要老是依靠经验注意栈空的情况要注意遇到操作符,弹出后进行运算,-和运算是有被减/除区别的,第一遍写的时候就出现了这个错误。原创 2023-05-04 20:17:20 · 608 阅读 · 0 评论 -
代码随想录算法训练营第十天|232.用栈实现队列 225 用队列实现栈
两个队列实现但一个是实际使用的队列,另一个是用于备份。原创 2023-04-18 10:14:21 · 135 阅读 · 0 评论 -
代码随想录算法训练营第九天|KMP
不太会,以后补。原创 2023-04-18 09:44:29 · 187 阅读 · 0 评论