自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

分三个情况1、支付5,直接收下2、支付10,只能找53、支付20,用10+5或5+5+5,优先用10+51.注意判断逻辑即可。

2023-08-31 18:52:14 67

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

1.如果遍历完后k还有剩余,说明数组所有数为正数。如果剩余k为偶数,则不用管(因为可以对同一个数多次取反操作),k为奇数,将最小值取反一次即可。

2023-07-25 21:59:58 69

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

本题的巧妙点在于:假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。那么只需要关注每天的利润即可,只取每天的正利润相加即可。1.for循环从1开始,第0天不能有利润。

2023-07-20 21:34:49 57

原创 训练营第三十一天 | 455. 分发饼干,376. 摆动序列,53. 最大子序和

遍历胃口,当最大的饼干能够投喂时,才投喂,如果不符合,仍然将最大饼干分给第二胃口大的。1.遍历之前先对两个数组排序。

2023-07-20 20:19:58 58

原创 训练营第三十天 | 回溯算法总结

这几个习题二刷再总结(332. 重新安排行程,

2023-07-18 20:48:20 26

原创 训练营第二十九天 | 491. 递增子序列,46. 全排列,47.全排列 II

本题与 子集II 类似,都是在树层上去重,多的一个判断就是当本树层中出现小于路径队尾的元素时也跳过。1.树层重复元素去重时,不能用 nums[i] == nums[i-1] 来判断,因为数组是无序的,所以用unordered_set判断是否重复。

2023-07-18 20:42:22 33

原创 训练营第二十八天 | 93. 复原IP地址,78. 子集,90. 子集II

在终止条件时,需要判断最后一段是否合法。在单层逻辑中,需要对切割的每一段判断是否合法,如果不合法,说明该层已经不能作为合法ip地址,直接终止for循环。1.在判断是否合法函数中,还需要加上为了防止"101.0.23."的情况发生。

2023-07-17 21:18:55 21

原创 训练营第二十七天 | 39. 组合总和,40. 组合总和II,131. 分割回文串

本题与 组合总和III 的不同是可以取相同的数,只需要在 backTracking(candidates, target, sum, i+1) 中换成 i 即可,同时判断的终止条件增加sum > target,否则会进入死循环。1.第一个for是遍历数组,会按顺序从第一个数遍历到最后一个数。

2023-07-15 20:29:55 19

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

类似于 组合 那道题,终止条件除了path.size() == k 之外,还有sum == n。单层递归的逻辑增加了sum,记住sum的回溯。无。

2023-07-15 14:19:37 39

原创 训练营第二十四天 | 理论基础,77. 组合

每个框是一个for循环,当从1,2,3,4取到1后,接着在2,3,4中取2,得到 [1,2],接着回溯到 [1],再取3得到 [1,3]......循环完之后返回到最上一层,再从 [1] 回溯到 [ ],这就是回溯的精髓,将利用递归将添加的数再利用回溯删除。1.startIndex中递归时用 i+1 才能让下一层从后一步数搜索。

2023-07-15 13:10:53 18

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

根据二叉搜索树的特性,如果当前遍历的节点小于区间,那么右孩子可能符合条件,只需返回以右孩子为根节点的干净树即可;节点大于区间返回以左孩子为根节点的干净树,判断条件完成后继续写遍历的逻辑。无。

2023-07-14 21:19:06 21 1

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

可以用二叉树的公共祖先做,对于二叉搜索树,只需从上往下搜索,找到的第一个在p,q之间的值就是最近公共祖先,因为此时左子树包含p,右子树包含q,如果继续向下遍历的话,必定会错过一个。1.由于不知道p和q谁大,所以用当前值和p,q同时比较。

2023-07-13 21:23:20 27 1

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

与判断是不是二叉搜索树类似,二叉搜索树用中序遍历是一个递增的数组,判断数组即可。如果不用数组就用一个指针来比较,指针存储上一个结点,与当前节点比较,得到差值。1.注意差值的初值设置。

2023-07-12 21:47:46 19 1

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

按照构造二叉树的顺序,先判断大小,再找出最大值所处的下标,再分隔数组,再递归。1.在查找数组的最大值时,max要初始化到INT_MIN,如果初始化为0,在数组只有0一个数的时候,会跳过赋值,找不到最大值。

2023-07-09 18:20:12 29 1

原创 训练营第十八天 | 513. 找树左下角的值,112. 路径总和,113. 路径总和ii,106. 从中序与后序遍历序列构造二叉树,105. 从前序与中序遍历序列构造二叉树

该题目用层序遍历好理解,需要维护每一层的第一个值就可以。递归用的是前序遍历求深度,在深度更新的时候维护的值就是每一层的第一个值。1.注意求深度时的前序遍历和后序遍历方法。

2023-07-09 12:06:52 24 1

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

该题目用递归很简洁,只要判断每个相邻的子树是否为平衡树即可,递归的条件要判断清楚,在得到左子树和右子树的高度进行判断之前,先判断每个子树的返回值是不是-1,如果是-1直接返回上去,一步一步将-1传递到最顶层。1.注意求高度和求深度的判断条件,max or min。

2023-07-08 16:51:38 17

原创 训练营第十六天 | 104. 二叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数

学会层序遍历和递归遍历,二叉树的深度是从上到下(对应后序遍历),高度是从下到上(对应前序遍历)。1.用递归函数中的前序遍历时,想象从根节点开始的一个数字,往下一格就+1,往上一格就-1。

2023-07-06 21:06:39 79 1

原创 训练营第十五天 | 层序遍历10道,226. 翻转二叉树,101. 对称二叉树

理解层序遍历的顺序,先创建列队,遍历每一层的时候记录列队的大小,再对每一层的元素弹出,弹出的同时添加子节点。1.在10道题中,大的方法不变,只是对记录列队的每一层稍加修改即可。

2023-07-04 20:59:52 153

原创 训练营第十四天 | 二叉树基础

记住二叉树的形式,存储方式,和几种常见的二叉树。

2023-07-02 19:58:49 283 1

原创 训练营第十三天 | 239. 滑动窗口最大值,347. 前 K 个高频元素

需要自己利用列队实现一个维护窗口内最大值的队列。1.创建自己的队列时,在pop和push前都需要检查当前队列是否为空,否则可能会对空列队遍历或查找,产生错误。

2023-06-30 21:23:30 339 1

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

利用栈的特性,先入先出,与代码中的括号用法类似。注意几个判断条件:第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了。

2023-06-24 21:33:30 588 1

原创 训练营第十天 | 232.用栈实现队列,225. 用队列实现栈

理解栈和列队基本原理和基础用法,就可以实现。1.注意利用函数的复用,会大大提升代码的整洁性和可读性。

2023-06-24 19:46:28 646 1

原创 训练营第九天 | 复习+回顾

KMP算法准备跳过,之后补档。

2023-06-24 17:14:45 614 1

原创 训练营第八天 | 344.反转字符串,541.反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串

该题目较为简单,利用双指针即可。1.如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。2.如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

2023-06-24 16:40:53 596 1

原创 训练营第七天 | 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和

改题目较为简单,思路就是查找之前出现过的数与当前的数是否符合题意。但不需要去重或者排序,而且只需要关注数值之和和数值对应的下标,不需要关注数值本身是否重复,所以用unordered_map即可。1.将暴力循环的四个for循环转化为两个for循环,之间通过map记录并关联,是个很好的降低时间复杂度的方法。

2023-06-23 20:55:49 672 1

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

该题目是哈希表的基础题目,较好理解,主要是明白我们常见的数组也是一种哈希表,字母有对应的ASCII码,就会有唯一值与数组的索引对应。在哈希数组创建前记得把数组初始化为0。

2023-06-23 14:25:20 781 1

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

该题主要考察对结点指针的把握情况,要能够熟练运用结点的交换,临时结点的创建。做题时把图画出来就一目了然。1.注意遍历的停止条件 cur->next!= nullptr,该条件是while里的,注意和if里的区分。2.在结点交换时要明白结点的指向只能有一个,一旦更改,原先指向的结点就找不到了,注意先用临时结点保存再更改。

2023-06-19 20:34:19 933

原创 训练营第三天 | 203.移除链表元素,707.设计链表,206.反转链表

注意链表的基本操作:新建节点、链表遍历和删除节点的内存。判断当前节点是否为空指针的代码是,如果当前节点为空指针,则说明已经遍历到了链表的末尾,需要结束遍历。同时,为了避免访问下一个节点时发生空指针异常,还需要判断下一个节点是否为空指针,即。如果下一个节点为空指针,则说明当前节点是链表的最后一个节点,不需要再继续遍历。

2023-06-18 19:36:29 1039 1

原创 训练营第二天 | 977.有序数组的平方,209.长度最小的子数组 ,59.螺旋矩阵II

看到题目可能首先会想到暴力解法,我认为对初学者来说也是一种不错方法。但如果对时间复杂度有要求,就需要考虑别的方法了。说回题目,数组为非减序列,但负数平方后会打乱原有顺序,这就需要将负数与正数相比较。比较的原则就是数组左边一个指针,右边一个指针,他俩比谁大,就放到新的空数组中,这样比较完后新数组就是从大到小排列了。1.由于原数组是非递减序列,是从大到小遍历,新建数组的索引从最后一个开始。2.注意左指针和右指针终止条件的设置。如果left <= right中的比较符不是<=,那么会少遍历最后一个数。

2023-06-18 16:48:37 980 1

原创 训练营第一天 | 704. 二分查找,27. 移除元素

注意左右区间的开闭,最好坚持一种习惯不要改变,用例子从头到尾理一遍即可。且。2、以上取中值是为了防止C/C++下int类型,四字节情况下int的范围是-2147483648 到2147483647,假设left = 1, right = 2147483647, 那么left + right就会超出int的正数范围,变成-2147483648,数值发生改变。

2023-06-12 21:27:34 1032 1

空空如也

空空如也

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

TA关注的人

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