自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-06-01 14:57:48 221

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

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

2024-05-31 13:14:49 97

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

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

2024-05-30 15:26:11 243

原创 代码随想录算法训练营第二十二天|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 141

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

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

2024-05-28 16:45:01 265

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

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

2024-05-27 18:35:39 403

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

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

2024-05-26 18:43:18 288

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

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

2024-05-26 13:14:44 310

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2024-05-18 20:04:52 246

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

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

2024-05-17 20:02:50 136

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

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

2024-05-17 19:03:41 309

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

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

2024-05-15 21:06:59 317

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

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

2024-05-15 00:12:44 123

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

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

2024-05-13 20:13:58 291

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

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

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

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

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

2024-05-10 20:36:20 475

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

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

2024-05-09 22:44:51 448

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

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

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

空空如也

空空如也

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

TA关注的人

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