自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 代码随想录算法训练营第六十天| 84.柱状图中最大的矩形,总结

③两个月的算法练习结束了,从头到尾过了一遍经典题目,后面重要的是复习。一刷的时候有些问题完全解决,过了那么久前面的题也忘了。单调栈:本题是要找每个柱子左右两边第一个小于该柱子的柱子,所以从栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序!①与接雨水不同的是这里求柱子凸出来的部分,而不是凹槽了,所以单调栈从栈头到栈底是从大到小的顺序,与接雨水恰恰相反。双指针:记录每个柱子左边第一个小于该柱子的下标,而不是左边第一个小于该柱子的高度。②感觉还是比接雨水复杂点,没理清思路,后面复习得好好看看。

2024-05-21 20:02:02 112

原创 代码随想录算法训练营第五十九天| 503.下一个更大元素II,42. 接雨水

①循环数组的处理方法,复制数组得到一个二倍长度的数组;遍历两遍数组,用取余的方式遍历②42.接雨水的解决方法很巧妙,不过在处理过程中还是要遵循同一个规则,要么按行计算,要么按列计算③暴力解法在每一步都需要重新寻找左右柱子的最大高度,时间复杂度O(n^2)④双指针法将计算左右柱子最大高度的步骤放在计算雨水之外,时间复杂度O(n),不过还是要遍历三次数组,还增加了额外的空间⑤单调栈法是按行计算,通过高度与宽度的乘积得到雨水总量。因为雨水的收集需要一个凹槽,也就是说先单调递减,后单调递增。

2024-05-20 19:51:18 439

原创 代码随想录算法训练营第五十七天| 单调栈:739. 每日温度,496.下一个更大元素 I

①单调栈解决的问题是找右边比自己大或者小的元素,如果找比自己大的元素就是用递增栈,如果找比自己小的元素就用递减栈②单调栈存的是下标,如果比较元素则利用下标索引元素值③单调栈一般先将第一个下标0入栈④遍历数组是从下标1开始,进行比较⑤遍历数组时有三种情况,小于,等于,大于,今天这两道题都是找比自己大的元素,所以小于等于直接入栈;大于时,要保证栈从栈头到栈底单调递增,所以需要将栈头元素弹出,直至当前元素大于栈头元素或者栈为空时,将当前元素入栈。

2024-05-18 21:46:01 555

原创 代码随想录算法训练营第五十六天| 647. 回文子串,516.最长回文子序列

①回文子串,一个字符串无论从左到右还是从右到左读都一样②判断是从中间向两边延申,一个字符和两个字符肯定是回文子串,如果左右各加一个字符,就判断这两个字符是否相等,如果相等,则这个长字符串为回文子串③这是目前遇到的唯一dp数组定义与题目所求不一样的题目④明确子字符串和子序列的区别,前者必须连续,后者不需要⑤要根据递推公式来确定初始化以及遍历顺序⑥最后的结果要么是判断的最值,要么是dp数组推导的终点。

2024-05-17 17:43:52 211

原创 代码随想录算法训练营第五十五天| 583. 两个字符串的删除操作 ,72. 编辑距离

①编辑距离问题的dp数组定义都差不多,主要是题目要求不同,状态不同会导致递推公式有所变化②按照动态规划五部曲这类题目还是比较好做的,dp数组定义都是显而易见的,题目要什么就是什么;重难点在于递推公式;然后根据dp数组定义以及递推公式进行初始化。

2024-05-16 13:24:59 795

原创 代码随想录算法训练营第五十四天| 392.判断子序列,115.不同的子序列

①子序列问题都是从当前字符相等和不相等两种情况进行讨论,392.判断子序列,相等时长度加一,不等时母串跳过当前元素;115.不同的子序列是连续判断,因此在相等时要考虑匹配当前元素和不匹配当前元素两种情况,不等时也是跳过当前元素②搞清楚dp数组含义,在初始化时根据递推公式以及dp数组含义进行初始化,这点尤为重要。

2024-05-15 12:56:36 264

原创 代码随想录算法训练营第五十三天| 1143.最长公共子序列,1035.不相交的线,53. 最大子序和

①理解题意,将题目转换成熟悉的问题②动规五部曲③该复盘了。

2024-05-14 16:32:17 315

原创 代码随想录算法训练营第五十二天| 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

①子序列问题,dp数组的定义会简单一些,目前没有股票问题那么多状态②简单的子序列问题也可以使用贪心算法试试。

2024-05-13 20:13:27 409

原创 代码随想录算法训练营第五十天| 309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

①买卖股票问题,不能同时拥有多支股票,分为以下几种:可无限次交易;只能交易一次;只能交易两次;能交易k次;无限次交易但是有冷冻期;无限次交易但是有手续费②这类问题最重要的就是分清楚状态,k次交易和冷冻期的状态需要多看看。

2024-05-11 16:02:55 234

原创 代码随想录算法训练营第四十九天| 123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV

①买卖股票Ⅰ和Ⅱ分别是只能买卖一次和不限次数的买卖;买卖股票Ⅲ和Ⅳ分别是只能买卖两次和买卖k次。相同点是当天的状态只能由昨天推导而来,不同点是状态的多少②看了买卖股票Ⅲ的题解,AC后,单独完成了买卖股票Ⅳ,规律性很强③在做这类题时,最重要的是搞清楚dp数组的含义,并且要包含所有的状态。

2024-05-10 22:44:22 709

原创 代码随想录算法训练营第四十八天| 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II

①利用二维数组进行持有和未持有的状态记录还是很巧妙的,并不是对买入和卖出的状态记录,因为如果股票只能买卖一次时,之前买入后又买了,后面不能进行买卖,无法进行状态记录②动态规划的核心依然是dp数组的定义以及递推公式,dp数组要能记录所有状态。

2024-05-09 18:16:00 273

原创 代码随想录算法训练营第四十七天| 198.打家劫舍,213.打家劫舍II,337.打家劫舍III

①打家劫舍这种题的思路并不难,难点在于如何应用到不同的数据结构中②数组的操作比较常规;环形数组分情况讨论,一开始不好想到③二叉树中的动态规划,有两个关键点:一是二叉树结构数据的熟悉程度,主要是递归三部曲以及遍历顺序的选择;二是动态规划的熟练程度,主要是动规五部曲,与数组中的动态规划相比,dp数组的状态转移是逐层返回。

2024-05-08 13:42:27 409 2

原创 代码随想录算法训练营第四十六天| 139.单词拆分,56. 携带矿石资源(第八期模拟笔试), 背包问题总结

①问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])②问装满背包有几种方法:dp[j] += dp[j - nums[i]]③问背包装满最大价值:dp[j] = max(dp[j], dp[j - weight[i]] + value[i])④问装满背包所有物品的最小个数:dp[j] = min(dp[j - coins[i]] + 1, dp[j])

2024-05-07 15:04:29 360

原创 代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶), 322. 零钱兑换,279.完全平方数

①完全背包问题的应用:求装满背包时最大的商品数量,最小的商品数量②当不确定与排列组合有没有关系时,选相同的结果进行举例,例如{1,2}和{2,1}有无区别③完全背包与01背包相比,少了商品数量的限制,好像更简单一点。

2024-05-07 13:32:54 346

原创 代码随想录算法训练营第四十四天| 完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ

①完全背包与01背包的区别在于物品可以无限使用②遍历背包时不用倒序遍历,之前的倒序遍历是保证每件物品只能使用一次③先物品后背包的遍历所求的是组合数④先背包后物品的遍历所求的是排列数。

2024-05-06 21:50:57 164

原创 代码随想录算法训练营第四十三天| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零

①01背包的基础知识已经理解了,但是如何将题目转换为01背包问题还需要熟练②目前来说,将题目转换为01背包问题,主要是要找到背包与物品,然后确定每种物品只有一件③01背包问题:装满背包的组合有多少种,最多能装多少件物品等④dp数组含义以及递推公式的细节处理。

2024-05-06 21:05:17 603

原创 代码随想录算法训练营第四十二天| 01背包问题 二维,01背包问题 一维,416. 分割等和子集

①01背包问题,m个物品,有各自的重量和价值,背包容量为n,将物品装入到背包里,使得背包中物品的价值总和最大②选择背包大小为dp数组,dp[j]的含义是背包容量为j时装入物品的最大价值③再遍历dp数组时,每次都有两个选择,装与不装。当容量不足时就不装,价值与上一状态一样;当容量足够时,装入当前物品有一个价值,上一状态也有一个价值,取最大值④416.分割等和子集竟然能用01背包解决,属实是意想不到⑤刚开始接触背包问题,很多细节没有掌握,需要复习。

2024-04-30 21:11:44 904

原创 代码随想录算法训练营第四十一天| 343. 整数拆分,96.不同的二叉搜索树

①动态规划的突破点在于递推公式,就是要由前一个状态量推出当前状态量,想明白这个才能继续②不要对题目进行完全模拟,只关注题目需要的东西。例如96.不同的搜索二叉树,并不需要构建树,只需要得到推导公式,按照动态规划五步曲即可。

2024-04-29 13:35:11 283

原创 代码随想录算法训练营第三十九天| 62.不同路径,63. 不同路径 II

①路径问题,与台阶问题相似,每次前进都有两种方向,由此推出递推公式②加入障碍物后,在原有代码上添加对障碍物的考虑即可,遇到障碍物跳过③动态规划五部曲很好用。

2024-04-27 11:42:31 328

原创 代码随想录算法训练营第三十八天| 动态规划,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

①动态规划的第一天,基础知识种的五部曲很重要②今天的题都是入门题目,较为简单,但也是看视频讲解后做的③还是不能依赖核心代码模式,一是在ACM模式下不知道怎么下手,二是不好debug。

2024-04-26 11:56:17 404

原创 代码随想录算法训练营第三十七天| 738.单调递增的数字,968.监控二叉树

①贪心算法的题目总体上的思路时局部最优推全局最优,但是题目灵活,需要多刷多练②贪心算法作为一种思路,可以应用到各种章节的题目上,还是需要熟练数据结构③基础函数调用。int转字符串to_string(),string转int,stoi()

2024-04-25 12:21:39 279

原创 代码随想录算法训练营第三十六天| 435. 无重叠区间,763.划分字母区间,56. 合并区间

①重叠区间,一般都要对数组排序,要熟悉sort函数的第三个参数以及排列规则②区间的重叠定义细节要注意,有时两个区间右端点与左端点相等不算重叠,有时算,具体看题目。

2024-04-24 12:45:35 262

原创 代码随想录算法训练营第三十五天| 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

①贪心算法已经做了一些题了,但遇到新题时还是没有明确的思路,多练多复习②双维度排列问题,需要逐步分析,不可一起考虑③重叠区间问题,注意区间的更新。

2024-04-23 16:11:04 321

原创 代码随想录算法训练营第三十四天| 1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果

①思路很重要,不要局限于题目的描述,然后对题目进行相应的模拟,应该跳出模拟,从本质下手,例如1055.K次取反后最大化的数组和,全为正数时,对最小元素不必重复取反,无非就是两种情况,取反和不变,只需要模取2即可;例如134.加油站,不用模拟从出发站走一圈的情况,首先将问题转变为剩余油量问题,其次也就两种情况,有解无解。无解时,说明剩余油量之和为负数;有解时,说明一定有一个站点可以当作出发站,所以只需要从头到尾遍历依次即可②熟悉库函数。

2024-04-22 14:53:31 316

原创 代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II ,55. 跳跃游戏,45.跳跃游戏II

①第一题与昨天的最长子序列类似,但是刚开始不好理解题意,一天内可重复买卖是关键,突破点在于记录每天的盈利,只累加正数②第二第三题也是思路的转变,从每步的跳跃,转变为每次的覆盖范围,这样转变可以避免讨论每次跳跃了几步③目前来看,贪心问题难点不在于代码,而在于思路,想通的话代码写起来很简单。

2024-04-20 15:21:04 343 3

原创 代码随想录算法训练营第三十一天| 贪心算法:455.分发饼干,376. 摆动序列,53. 最大子序和

①贪心算法,以局部最优推整体最优②不像之前的题有清晰的模板,贪心算法是一种解题的思想,题目之间差异很大,所以不能套用模板,更应该理解思想,理解题目③多刷题找贪心思想的规律与手感,记得复习前面的章节。

2024-04-19 15:02:02 238

原创 代码随想录算法训练营第三十天| 332.重新安排行程,51. N皇后,37. 解数独

①回溯中如何确定函数类型,如果只需要一个解,用bool,找到一个正确的解直接返回true。如果需要所有解,用void,因为要遍历树形结构的所有叶子节点②容器的选择,这里要复习前面的章节,要掌握栈,队列,哈希表等数据结构③pair的用法,将两个对象组合成一个单一的对象④在N皇后和解数独这种复杂回溯问题时,除了合理的遍历与递归,还要将注意判断合法性⑤回溯三部曲:确定函数类型及参数;确定终止条件;确定单步递归逻辑⑥回溯法的题目都应该包含回溯三部曲,但并不一定是通用模板,例如解数独。

2024-04-18 14:04:13 705 3

原创 代码随想录算法训练营第二十九天| 491.递增子序列,46.全排列,47.全排列 II

①递增子序列也是组合问题的一种,只是加了一些限定条件,所以在原先回溯代码的模板上将限定条件加上即可②排列问题,排列中包含所有元素,顺序不同即结果不同,最后结果不能有重复排列。由于结果要求包含所有元素,所以每次都要对整个数组进行遍历,为了防止有重复元素加入,使用bool 型的used数组记录使用过的元素③数组中有重复元素时,去重思路与之前的组合问题类似,先对数组进行排序,然后利用used数组进行树层去重④目前接触到的使用回溯算法的问题,大体上都是同一个思路,只是要将不同问题的限定条件体现在框架当中。

2024-04-17 15:29:21 428

原创 代码随想录算法训练营第二十八天| 93.复原IP地址,78.子集,90.子集II

①回溯已经做了几道题了,模板也比较熟悉了,但是很多细节的方面还是没有注意到②分割问题中终止条件的判断,对字符串的操作需要熟练③子集问题与组合问题类似,但不同的是每个组合内元素个数相同,但子集不是,所以求子集时需要在每一个节点上收集结果④关于“树层去重”,要熟练掌握used数组的用法。

2024-04-16 11:54:47 413

原创 代码随想录算法训练营第二十七天| 39. 组合总和,40.组合总和II,131.分割回文串

①对回溯框架有了更深的记忆②了解了组合中可以重复使用元素的情况以及去重的情况③接触了回溯方法如何解决字符串问题,框架类似,但是在细节处理上需要注意。

2024-04-15 15:33:45 297

原创 代码随想录算法训练营第二十五天| 216.组合总和III,17.电话号码的字母组合

①加强了对回溯模板的理解②映射的巧妙之处③完成题目要求的功能后,继续思考剪枝的处理,提高效率。

2024-04-13 14:36:21 299

原创 代码随想录算法训练营第二十四天| 回溯算法理论基础,77. 组合

①在二叉树章节一直在使用递归,在这里加入了回溯操作,也能理解②对于数组的处理还是比较熟悉,在解决后面的问题时,加深对字符串和回溯的理解。

2024-04-12 11:54:55 296

原创 代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

①二叉树的类型:满二叉树,平衡二叉树,二叉搜索树,对称二叉树等②二叉树的遍历顺序:层序遍历;前序遍历、中序遍历、后序遍历③二叉树的相关操作:构造二叉树,增加节点,删除节点,翻转,路径,类型判断等④二叉树的章节到此结束,上述是目前对二叉树的总结。一般来说,根据要求确定遍历顺序,再进行对应的操作。解决了遍历顺序后,操作跟数组和链表比较类似,主要是理清逻辑。

2024-04-11 11:17:19 305 1

原创 代码随想录算法训练营第二十二天| 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

①一定灵活运用搜索二叉树的性质,自带顺序②在二叉树章节,一直在使用递归,谨记递归三部曲③复杂问题先进行分类讨论,细化问题,逐步处理。

2024-04-10 16:29:36 219 1

原创 代码随想录算法训练营第二十一天| 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

①加深理解二叉树的遍历②加深理解二叉树中的双指针法③找众数这道题对于最大频率更新,结果数组更新的处理十分巧妙,记住这个处理方法。先存后更新,遍历完毕后存的就是符合条件的结果。

2024-04-09 15:21:40 242

原创 代码随想录算法训练营第二十天| 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

①构造二叉树一定是按照中序遍历的顺序,先构造中间结点,再构造左右孩子②同时对两个二叉树的遍历,同步遍历③深刻了解二叉搜索树,每个结点的值都比自己左子树所有结点的值大,比右子树所有节点的值小。如果按照中序遍历的顺序,那么遍历到的元素值一定单调递增。

2024-04-08 17:46:24 342

原创 代码随想录算法训练营第十八天| 找树左下角的值,路径总和,从中序与后序遍历序列构造二叉树

①深度优先遍历并不一定要区分前中后序,当对中间节点没有操作时,只考虑先左后右即可②递归与回溯息息相关,理解了大概的思想,等后面梳理的更清楚了再做总结③由中序与后序数组构建二叉树,由前序与后序数组构建二叉树,这种反着来的题第一次遇见,还是要深入理解前中后序的遍历顺序。突破点在于找到根节点,前序数组的第一个元素,后序数组的最后一个元素都是根节点④在分割数组上,直接采用了简单明了的创建新数组并赋值,这种效率不高但是容易理解,先按照这种方法书写。二刷回顾的时候在考虑使用下标索引作为分割依据。

2024-04-06 15:53:22 1030 1

原创 代码随想录算法训练营第十七天| 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和

①虽然已经做了二叉树的一些题,并且了解了前中后序遍历,层序遍历,但是遇到新题的时候还是没有清晰的思路②首先明确题目要做什么,其次选择遍历方式,最后明确处理方式③递归三部曲很重要④二叉树的细化处理还是要加强,之前都是对整个二叉树进行遍历,然后采用相同的处理方式。这种对特定节点,路径以及二叉树的类型判断等问题还要多练。

2024-04-05 16:18:06 342 1

原创 代码随想录算法训练营第十六天| 104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

①目前来看,二叉树的相关题目最关键的地方在于遍历的方式,无论对二叉树做何种操作,都需要遍历到想要的节点②递归法的前中后序遍历代码相对简洁,但是逻辑一定要搞清楚,尤其是应该选择哪一种遍历方法③104.二叉树的最大深度和111.二叉树的最小深度这两道题,昨天使用层序遍历解决,今天学习了如何使用后序遍历递归解决。

2024-04-04 13:59:41 261 1

原创 代码随想录算法训练营第十五天| 层序遍历,226.翻转二叉树,101. 对称二叉树

①学会了层序遍历,至少模板目前会了,练习的十道题也是一遍写过,算是掌握了②翻转二叉树和对称二叉树,使用的都是递归写法,代码比较简洁,思路也理解了。但并未完全掌握,递归法还是要多看多理解,有时间迭代法也看看。

2024-04-03 20:22:55 381 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除