自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

踩坑:很多坑,自动把它当作背包问题了,但其实这就是一个普通的动态规划题目,背包问题本质上是一个二维问题,只是可以简化成一维,想要抽象为背包问题首先就是要明确。而本题的dp数组的含义是dp[i]:[0, i]家能偷到的最大价值,其中并不涉及到背包大小。

2024-06-30 15:05:28 418

原创 代码随想录算法训练营第四十四天|322. 零钱兑换 279.完全平方数 139.单词拆分

踩坑:在初始化那里卡了好久,现在学到了,应该对0下标和非0下标分别讨论,0下标的初始化是为了递推正常进行,非0下标初始化是为了不要覆盖新值。思路:完全背包求装满背包最少的物品问题。

2024-06-29 15:01:01 170

原创 代码随想录算法训练营第四十三天|完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼梯 (进阶)

踩坑:先看了视频,没踩坑思路:一维01背包的倒序遍历改为正序遍历就是完全背包,即一个物品可以被选多次。

2024-06-28 14:41:02 272

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

踩坑:最后的返回值应该是sum减去已经凑出来的石头堆两次。思路:关键在于认识到不止两个石头的差可以得到,两堆石头的差也能得到。所以题目可以变成将这一堆石头分成两堆重量相似的石头。求解过程就变成了分割等和子集。

2024-06-26 16:45:22 322

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

踩坑:在考虑当前物品时,应先考虑当前的背包能不能放得下当前物品int。

2024-06-25 16:06:18 493

原创 代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

踩坑:二维的vector数组需要初始化,否则会报错访问空指针int。

2024-06-23 15:34:10 304

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

踩坑:dp[0] = 0真就是第零个斐波那契数等于0,不是第一个。思路:确定dp数组的含义:dp[i]:第i个斐波那契数递推公式:dp[i] = dp[i-1] + dp[i-2]dp数组初始化:dp[0] = 0;dp[1] = 1遍历顺序:从前往后。

2024-06-21 20:07:28 386

原创 代码随想录算法训练营第三十七天|56. 合并区间 738.单调递增的数字 968.监控二叉树 (可跳过)

踩坑:昨天做了重叠区间的题,所以没踩坑。只是我们写的代码有点冗余,建议看卡哥的。思路:首先对所有区间根据左边界从小到大排序,这样可以不考虑左边界的情况。依次比较相邻两区间的右边界和左边界,如果重叠则更新可覆盖区间的右边界。

2024-06-13 12:34:45 165

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

踩坑:以为不需要考虑具体怎么找钱,一直在从整体上想解决方案。思路:当客户支付5元我们只需要收下,当客户支付10元我们只能找零5元,当客户支付20元我们优先找零一个10元一个5元,如果不行也只能支付三个5元。可以看到所有的模式相对比较固定,所以可以直接模拟。

2024-06-12 14:36:36 297

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

踩坑:没有思路:数组里有正有负,肯定先对负数进行取反,且从小开始。如果所有负数都为正后还可以取反,则如果此时次数为奇数,将最小整数取反,如果为偶数,可以直接求和。

2024-06-11 19:02:55 236

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

踩坑:差点陷入不必要的细节,比如怎么表现买入卖出,怎么体现同一天买入卖出思路:这里的股票买卖是看了天眼,明天的涨跌今天就知道,那肯定是如果明天涨了我今天才买,因此,将每天的价格可视化出来,统计所有单调上升的总和即可。

2024-06-09 16:08:24 199

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

踩坑:无思路:让每个饼干满足其能满足的胃口最大的小孩以充分利用。

2024-06-08 16:19:26 275

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

踩坑:先看了视频,没踩什么坑思路:类似于一种排列问题,只不过每个位置之间需要满足一些条件。用回溯法可以穷举所有的情况。

2024-06-06 17:48:53 156

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

踩坑:意识到了如果相同的数不挨在一起,used去重方式就没用了,也想到了应该可以另开空间来记录哪些元素已经被用过,后续树层便不能再使用。同时也想到了如果后下个元素比当前元素小则不放入path。但问题就是不知道这些逻辑应该放在哪里。。。思路:本题再一次加深了我对于程序执行与树状结构推进之间映射的理解。与使用used去重不同,本题需要在树层上避免重复取的元素不挨在一起,所以需要在每个树层上记录已经使用过的元素以保证之后不会再使用相同的元素(for循环代表着树层的开始,因此需要在for外申请空间)。

2024-06-06 12:07:32 346

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

踩坑:一开始是自己做的,踩了不少坑,纠结到底是切割几次,在想如果切割4次,该怎么让第4次固定切在结尾。但其实切3次即可。不知道string类的insert和erase函数。stoi函数的输入要有效(不为空,不超过int表示范围,不掺杂非法字符)思路:与分割回文串类似,都属于切割问题,不同的是。所以整体上就是对字符串进行切割,对切割出的字串进行合法性判断,如果合法,在其之后insert逗点。回溯时erase逗点。且在切割三次后,对尾部字串进行合法性判断,若合法,则收集。

2024-06-04 13:34:54 179

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

踩坑:把元素可以重复利用理解成每次向下递归时集合都是原始集合。但是其实这样会造成重复。思路:在向下递归时,开始的位置不再是当前元素的后一个,而是当前元素,即下一层递归也可以用当前元素。

2024-06-03 16:49:52 256

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

踩坑:与“77.组合”很像,没踩什么坑,注意要传start就行。思路:经典回溯模板,值得研究的是剪枝策略,当剩余元素的最小值比还需要的总和大时可以结束(可以在for循环里剪枝,也可以在停止条件处剪枝),当剩余元素的个数不足所需个数时可以结束(for循环剪枝)

2024-06-01 14:57:48 289

原创 代码随想录算法训练营第二十四天|77. 组合

思路:回溯算法的经典例题。熟悉组合问题n叉树的构建。同时还引出了剪枝的操作,主要是在for循环的中间条件上动手脚。踩坑:要明确当前循环遍历的集合是什么以及要向下递归传递的集合又是什么。

2024-05-31 13:14:49 128

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

踩坑:意识到了需要删除节点,但是没意识到要递归的删除。同时,与删除目标节点的删除逻辑也不完全相同。思路:遍历二叉搜索树,遇到在区间之外的节点,若小于low则该节点的左子树肯定也都小于low所以只需要考虑右子树,大于high同理。这里如果按照删除目标节点的逻辑应该返回右(左)子树根节点,但是右(左)子树中依然有可能有超出区间的节点,所以要对子树进行递归,返回修剪后的子树根节点。

2024-05-30 15:26:11 269

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

踩坑:root->val在p和q之间时不需要再向下递归了,此时root就是最近公共祖先。思路:根据二叉搜索树的特性,可以在递归过程中选择递归方向(q和p均大于root,q和p均小于root,root在q和p之间)。需要注意的是,当root在q和p之间时,root就是当前最近公共祖先。因为再向下会错过q或p,向上root只能作为某棵树的子树。

2024-05-29 21:23:24 165

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

踩坑:关于递归函数需不需要返回值这一点还需要强化。当递归满足一定条件需要立即返回时,需要返回值,当需要遍历整棵树时,一般不需要返回值。思路:二叉搜索树中序遍历会得到严格升序序列,只需要用双指针记录相邻两节点的最小差值即可。

2024-05-28 16:45:01 290

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

踩坑:跟前天的由类似,所以没踩坑。思路:跟一样,停止条件就是何时这棵树简单到可以直接返回就返回。其他时间都是分割数组,将左子树和右子树继续向下递归。

2024-05-27 18:35:39 429

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

踩坑:用层序没有坑。用递归需要思考的东西有点多,主要是需要记录当前的深度。

2024-05-26 18:43:18 311

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

踩坑:int只有在等于0的时候等同于false,负数也是true。思路:平衡二叉树==任意子树的深度差不超过1。所以要用后序遍历,在得到左右子树的深度后,如果已经不满足平衡二叉树则返回-1。

2024-05-26 13:14:44 332

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

踩坑:先看了视频,需要辨析的就是树的高度(节点到叶子节点的距离)和深度(节点到根节点的距离)思路:这是一道用层序遍历解决过的问题。在此是为了练习递归。使用后序遍历可以求解高度,而根节点的高度恰恰就是最大深度,若使用前序遍历求解深度,则无法直接得到(根节点的深度为1)。

2024-05-24 14:17:03 226 1

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

踩坑:先看的视频,没踩什么坑思路:核心是使用队列并记录每一行的size,在遍历本行的时候下一行就入队了。

2024-05-23 19:28:15 271 1

原创 代码随想录算法训练营第十四天|144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉树的后序遍历

踩坑:先看了视频,所以没踩坑,但是需要注意的是不要陷入回溯法的陷阱。

2024-05-23 14:57:44 285 1

原创 代码随想录算法训练营第十三天|239. 滑动窗口最大值 347.前 K 个高频元素

踩坑:一开始觉得很简单,暴力求解即可,之后看了视频,学习了思路。因为先看了视频,所以没踩什么坑思路:核心是怎么维护窗口内的数。固定窗口每次向后移动一格的行为很像队列,所以考虑使用队列这一数据结构。队列在push元素时,判断队尾元素是否大于新元素,若小于则pop队尾元素(),直到队尾大于等于新元素,再将新元素push,即保持队列中元素的递减(非严格)。这样可以将窗口内最大的元素保持在队首。pop时需要判断队首元素与窗口抛弃的元素是否相等,相等才pop,不相等说明在之前push阶段已经pop了。

2024-05-20 20:32:36 242 1

原创 代码随想录算法训练营第十一天|20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

踩坑:要记得往栈里压的是左括号还是右括号思路:核心是最后出现的左括号一定是最先被消掉的。

2024-05-18 20:04:52 270

原创 代码随想录算法训练营第十天|232.用栈实现队列 225. 用队列实现栈

踩坑:对于STL中stack的成员函数还不熟悉,比如应该是empty不是is_empty,是top不是peek,pop没有返回值思路:两个栈相互捯饬,用一个栈来维持队列的形态,另一个用来将栈反转(栈顶变栈底)

2024-05-17 20:02:50 156

原创 代码随想录算法训练营第九天|28. 实现 strStr() 459.重复的子字符串

踩坑:由于对KMP不熟悉,导致每一个循环的条件,初始化都不是很明确思路:使用KMP算法,先求解next数组,在设计字串匹配逻辑。

2024-05-17 19:03:41 333

原创 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串

踩坑:无坑可踩思路:和反转数组是一模一样的,相向双指针。

2024-05-15 21:06:59 341

原创 代码随想录算法训练营第七天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

踩坑:需要注意的是count每次不是递增,而是加key的value。思路:核心还是和两数之和类似,确定目标和的一半,另一半也就确定了。只不过这里对于其中一半的确定需要遍历两个数组。

2024-05-15 00:12:44 133

原创 代码随想录算法训练营第六天|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

踩坑:对哈希表的概念不熟悉思路:暴力双循环很简单,主要是为了熟悉哈希表。将每个字母映射到一个hash值(数值),将hash值与数组索引联系,使用数组元素来标记字母。

2024-05-13 20:13:58 294

原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

踩坑:一开始觉得用不了虚拟头节点,有一次没考虑到特殊情况下空指针的问题思路:核心是要意识到两个节点交换后,如由1->3->4变为1->4->3时,1要指向4,即在操作需要反转的两个节点的时候,前一个节点的地址也要留着。因此,可以使用双指针或三指针。在纸上画一下过程写代码就会简单很多。

2024-05-11 21:05:32 355 1

原创 代码随想录算法训练营第三天|203.移除链表元素 707.设计链表 206.反转链表

踩坑:很基础的题,唯一可能出现问题的地方是由于长时间没有写过代码,导致缺少判断head是否为空的条件。

2024-05-10 20:36:20 501

原创 代码随想录算法训练营第二天|977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

踩坑:这道题当然可以暴力解决,即遍历数组平方后再排序。但是官方也给出了进阶要求(O(n)),代表着对我们的挑战(怎么能认输呢),卡哥也提示了要使用双指针,但是使我陷入了27.移除元素的漩涡,还是想原地解决而不申请新的空间(还是太年轻)。思路:可以先对数组进行平方,也可以不做,因为只要考虑的是绝对值,原数组都会是[大,小,大]的结构,其中最大值一定在头部或尾部。那我们就可以申请一个新的数组,把原数组中的元素从大到小选择出来,顺序放入新数组,而这个选择的过程可以用到双指针。

2024-05-09 22:44:51 478

原创 代码随想录算法训练营第一天|704. 二分查找、27. 移除元素

踩坑:由于长时间没有coding,对于很多算法以及概念脑袋都不是很清醒,直接开始写的时候竟然一直在往递归的方面想(脑子里全是归并排序的分治方法),对二分法已经没有一个清晰的过程印象了,越想越迷糊。之后去看了卡哥的视频,看了一点就豁然开朗了,直接AC。思路:想要解决二分法一定要先清楚的描述出二分法,很多人可能只是脑子里有个概念,大概知道是什么意思,所以。当有一个升序的数组,以及一个target,我们首先需要将target与中间值对比,根据结果来更新区间范围,这就是二分法的核心。

2024-05-08 21:52:40 425 1

空空如也

空空如也

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

TA关注的人

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