- 博客(28)
- 收藏
- 关注
原创 Day31|56.合并区间、738.单调递增的数字、968.监控二叉树
本人是改变每一个遍历的区间(开始取上一个区间,结束取上一个和这个的更大的那个值),这样运行时间比较慢。参考解法是把区间先存进结果,然后改变区间结束的位置,运行快。968.监控二叉树 (可跳过)738.单调递增的数字。
2025-10-08 17:15:04
108
原创 Day30|452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间
这道题自己分析的太复杂了。这题有个点我想错了,要清晰的知道:区间越大,覆盖越多,要删除的数量也就越多。思考的时候我刚好想反了。452.用最少数量的箭引爆气球。之前做过,所以这次做出来了。763.划分字母区间。想不到,直接看答案。
2025-10-07 18:31:28
112
原创 Day29|134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列
参考暴力解法中:for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历,要善于使用while!用取余方法环形遍历太妙了!但还是学习了一种思想:两个维度一起考虑的话,先确定一边然后贪心另一边,两边一起考虑,就会顾此失彼。因为题目保证答案唯一,下列是根据测试集做出来的。只打败5%,所以也不作数吧。然后是参考贪心算法二,这个思路是不可能想出来的了。类似的题不要两边一起比较,要两边分别考虑。终于碰到一题超级简单的了。406.根据身高重建队列。
2025-07-11 13:01:33
173
原创 Day28|122.买卖股票的最佳时机 II、55.跳跃游戏、45.跳跃游戏 II、1005.K次取反后最大化的数组和
这题AC倒是很容易,把数组按大小排序一下就好。参考解法按绝对值排序的方法更好!因为答案好像并没有模拟出跳的过程,所以比较难理解,我这里是模拟出跳跃过程的。一句话总结思路:看两步最远能跳到哪。说实话,这道题简单到有点让人觉得难(不敢相信)。1005.K次取反后最大化的数组和。122.买卖股票的最佳时机 II。45.跳跃游戏 II。
2025-07-10 22:46:58
207
原创 Day27|455.分发饼干、376.摆动序列、53.最大子数组和
这题也不好想,但也是想出来了。做完这三题确实感觉贪心思路主要靠模拟,即使是常识,有时候也不好写。按自己模拟的思路写是写出来了,时间复杂度也是O(n),运行挺快,但代码看起来比较多。参考解法代码很简洁,但第一次看到还真想不到。
2025-07-10 13:48:00
94
原创 Week2|哈希表、字符串、栈与队列
介绍的栈和队列是SGI STL里面的数据结构(SGI STL由Silicon Graphics Computer Systems公司参照HP STL实现,被Linux的C++编译器GCC所采用,SGI STL是开源软件,源码可读性甚高)。栈的底层实现可以是vector,deque,list 都是可以的,栈和队列默认是以deque为缺省情况下栈的底层结构,可以指定其他。的(也就是说可以控制使用哪种容器来实现栈的功能,所以栈和队列往往不被归类为容器,而被归类为container adapter(
2025-07-09 10:50:45
174
原创 Day25|491.非递减子序列、46.全排列、47.全排列 II、332.重新安排行程、51.N 皇后、37.解数独
就是要树层去重,前面都是用自己的方法去重,这题不行,写的有点卡壳。树层去重,只要允许原数组重排列,都可以先sort再用while来去重。可以把皇后位置的合法性写成一个函数,看起来更清晰。看完讲解之后感受到了回溯之美!回溯到这里也就先告一段落了。491.非递减子序列。332.重新安排行程。
2025-07-05 19:10:47
123
原创 Day24|93.复原 IP 地址、78.子集 、90.子集II
看了卡尔画的树形结构图之后秒了,所以回溯类的题能否画出正确的树形图是能否解出来的关键。但卡哥收集结果的位置还是很巧妙,顺便把空集收了,我是把收集放在回溯前,就会收不到空集。还有这题对用不用写结束条件这点的分析也很精彩。这道题我是创建临时子串然后push进result中,其实可以直接在字符串上操作,加.即可。去重逻辑就用我之前的while方法就可以。93.复原 IP 地址。
2025-07-04 18:01:45
98
原创 Day23|39.组合总和、40.组合总和 II、131.分割回文串
而我解法运行时间这么长是因为:切割起始位置是i,终止位置是位于i后面的j,i和j的移动可以得到不同长度的字串,但是由于在同一层递归上起始位置的不断变化,导致得到的path不一定是从原始字符串起点开始的,所以最终需要判断path里字符子串总长度跟原字符串长度是否一致。起始是index终止才是i,这样就可以实现此功能:在同一层递归函数上,index是不变量,也就是切割的起始位置不变,变的是终止位置,于是可以检查同一起点不同终点的字符子串回文情况。40.组合总和 II。
2025-07-04 10:27:50
123
原创 Day22|回溯算法理论基础、77.组合、216.组合总和 III、17.电话号码的字母组合
第一次看回溯算法,确实似懂非懂的,感觉全看明白了,但又没有那种对知识的掌控感,后面做题看看。如果能把树画出来看着写代码很容易理解。然后这个剪枝操作还是很简单的。216.组合总和 III。看了上一题这题非常简单。17.电话号码的字母组合。
2025-07-02 16:14:35
455
原创 Day21|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
一遍过,但是用了额外空间截取数组片段,可以通过操作下标的方式来使空间复杂度为O(1)。这题修修改改也是做出来了,虽然是跟录里的解法一致,但代码还是写复杂了。108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。这道题理解题目意思直接秒。669.修剪二叉搜索树。
2025-07-01 15:55:18
117
原创 Week1|数组、链表
所以对于需要操作的节点,可以设置一个指到它前面的指针,比如24.两两交换链表中的节点就很典型,以及上述设置虚拟头节点也正如此意。--------------------分割线--------------------②一些操作只要先在纸上模拟出操作顺序就不难,都是纸老虎。(如插入,删除,移动)的,都加个dummy,只是遍历取点就可以不用加。之前有学过c和python,所以对这部分理论知识其实是知道的。操作当前节点必须要找前一个节点才能操作。等操作,都使用双指针法。是很重要的技巧,很多对。
2025-07-01 08:35:47
165
原创 D3/4补一下当时没记录的做题思考过程
206.反转链表、24.两两交换链表中的节点、19.删除链表的倒数第N个结点。这题第一次看还是有点难度的,主要我看过思路,所以能比较轻易做出来。原理知道了代码就很好写了。只要先在纸上模拟出操作顺序就不难。面试题 02.07. 链表相交。142.环形链表 II。203.移除链表元素。
2025-06-30 23:05:09
107
原创 Day20|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
这题把所删节点左右不为空的情况做复杂了,其余部分跟录上解法一致。235.二叉搜索树的最近公共祖先。插入到子节点very easy.701.二叉搜索树中的插入操作。450.删除二叉搜索树中的节点。
2025-06-30 10:59:29
427
原创 Day18|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先
用数组记录所有值秒了。如果要在遍历的过程中进行计算,就要记住前一个节点的值,也就是双指针,领悟一下二叉树遍历上双指针操作,记住怎么写。这道题一定要记住,感觉是很好的题!这题已经想到要用后序遍历,把子树的情况一直向父节点传递。但是代码还是完全没有思路,唉。这道题不开辟新的空间我完全能想到,也会做,但写代码的时候突然给自己整晕了导致费了点时间。530.二叉搜索树的最小绝对差。236.二叉树的最近公共祖先。501.二叉搜索树中的众数。
2025-06-29 22:03:20
112
原创 Day17|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
以下我的想法,完整的构造了一棵二叉树,但是刚开始第二和第三个if里面都忘了return,一定一定要注意。还有,如果直接在传进去的树的基础上改造性能应该更好(视频参考解法)。但有优化空间:不用每次都构造新数组,可以传下标操作下标。一旦找到目标node直接逐层返回结果。700.二叉搜索树中的搜索。忘了中序遍历可以完美验证。98.验证二叉搜索树。
2025-06-29 19:07:29
153
原创 Day16|513.找树左下角的值、112.路径总和、106.从中序与后序遍历序列构造二叉树
我代码主要问题就是给所有路径都做了判断,不会剪枝操作。其实只要左子树或者右子树返回了一个true就可以一直return true;向量片段(左闭右开)vector<int> newvec(oldvec.begin() + i, oldvec.begin() + j);做了十几道题了,这是第一道靠自己用递归遍历做出来的题。递归还是一如既往的想不出来,看完讲解自己敲了一遍。106.从中序与后序遍历序列构造二叉树。这道题第一次碰见是真的一点思路都没有。513.找树左下角的值。
2025-06-28 23:58:34
173
原创 Day15|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数
递归也能秒,虽然这题很简单。看完视频讲解后自己敲了一遍。222.完全二叉树的节点个数。257.二叉树的所有路径。
2025-06-28 13:20:40
88
原创 Day14|226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
用了前序递归法,后面的迭代法没看。中序递归法很绕,但一定要弄懂(可以看视频),看明白之后会对递归有一个更深的理解。今天后3题用层序遍历都很好做,但是递归总是很难想出来,递归是真的想不明白,好挫败啊,还得多看多练。自己选择用层序遍历。递归法推荐计算树的高度=树的最大深度。直接用前序递归求深度看不懂啊啊啊。104.二叉树的最大深度。111.二叉树的最小深度。101. 对称二叉树。
2025-06-27 20:33:46
145
原创 Day13|二叉树理论基础、二叉树前中后序遍历、二叉树层序遍历
数组存储,下标从左到右、从上到下,如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。这几天情绪一直紧绷着,连“感觉”也钝化了,也不知道自己在烦什么。这次先放下,跳过这两个稍微有点难度的,过后一定补上。最底层节点可能没填满,且都集中在最左边,满二叉树属于完全二叉树。参考解法:用了size来记录某层的节点数量,节省一个队列,其他地方基本一致。下面5道题(都看过题目了,没做)没啥新点,会写层遍历方法就能写。前中后,其实指的就是中间节点的遍历顺序。
2025-06-23 21:35:18
165
原创 Day11|150.逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素
学会了stoll()可以把字符串转化为数字。还要注意如果用双引号””括起来的内容,无论里面是一个字符还是多个字符,都属于字符串string类型;用单引号’’括起来的才是char类型。这道题第一次看到肯定是想不出解法的——维护一个单调队列。记住这一点就很容易理解:①窗口右滑一位获得新元素时,左边所有比它小的元素都没可能成为最大值了。自己想了这么一个办法来解体:用unordered_map统计每个元素出现次数,再用冒牌排序法找出前k个高频元素。题解中说的二叉树和堆没学过,看不懂。150.逆波兰表达式求值。
2025-06-23 09:17:49
339
原创 Day10|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项
这题也很简单,但是这章介绍的是栈与队列,所以很容易想到用栈来处理,如果是随机出的题目能想到这样处理吗?,可以把新字符串覆盖原字符串,但是要先clear(),clear完之后可以把字符串当成空串。1047.删除字符串中的所有相邻重复项。对栈和队列的理解,easy。对栈和队列的理解,easy。今天的题目都非常简单。232.用栈实现队列。225.用队列实现栈。
2025-06-22 16:53:24
97
原创 Day9| 151.翻转字符串里的单词、卡码网:右旋字符串
这题还是有难度的,看了下思路就是分三部分来写:①删除多余空格②翻转字符串③翻转每个单词。但是就这个删除空格的逻辑我自己想就写了半个小时。确实没想到这种解法:整体反转+局部反转。28.实现 strStr() 459.重复的子字符串。后面②和③做翻转这部分代码很简单。151.翻转字符串里的单词。
2025-06-21 19:41:35
141
原创 Day7|454.四数相加II、383.赎金信、15.三数之和、18.四数之和
最开始以为有优于O(n*n)的解法,想不出来,其实参考方法也是O(n*n)。好好体会一下 哈希法 如何提高程序执行效率。卡哥的双指针法讲得很好,听完思路之后通透了。掌握三数之和的方法后,这题解法还是能想到的,但是这个剪枝很容易踩坑!454.四数相加II。
2025-06-17 10:10:15
82
原创 Day6|242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
这道题算得上是比较难的“简单题”了,暴力法都很容易想到,但是时间复杂度O(n*n),要想到O(n)的解法真不容易。Map真的很妙的解法。题目本身不难,学习了unordered_set的使用。还懂得了不同容器之间的赋值可采用范围构造的方法(利用迭代器指定范围)。哈希表理论基础:三种哈希结构这里不是很理解,尤其是对于红黑树的描述,等后面学了红黑树回来看。这道题也很简单,但是没写出正确代码,有点沮丧。242.有效的字母异位词。349.两个数组的交集。
2025-06-16 17:46:53
141
原创 Day2|209.长度最小的子数组、59.螺旋矩阵Ⅱ、58.区间和、44.开发商购买土地
对比录上的就是while循环上多写了一个判断条件i <= n,实际上当i > n时sum就会累加成负数,自然也就会跳出循环,因此并不需要这一判断条件。这道题看了思路还是没写出来,最后看视频讲解才做出来的。也证明了自己对代码掌控能力还是不够,还得多加练习以提升代码能力。学习了前缀和方法,C++ 代码面对大量数据读取输出操作,最好用scanf 和 printf,耗时会小很多。这题自己能想到的也是暴力法,但leetcode超时无法通过。做了区间和之后,这题很容易想到也用前缀和的方法。44.开发商购买土地。
2025-06-12 15:17:13
149
原创 Day1.掌握了二分查找的区间处理和双指针法
977有序数组的平方。最先简单写了下选择排序,然后调用快排,但是忘了快排怎么写,做完之后去找了一下相关资料。由于数组本身是有序的,所以此题使用双指针法更好。首先是暴力法,思路比较容易想到,代码也比较简单。然后是双指针法,看了思路还是没能写出来(主要是还是不太理解),看完视频讲解后通透了。关键在于理解区间的定义是不变量,边界的处理根据区间的定义操作。一般有左闭右闭、左闭右开两种写法。
2025-06-11 20:31:21
188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅