![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码随想录打卡
文章平均质量分 86
AAA阿宽
做前端的
展开
-
DAY14|二叉树理论基础、递归遍历、迭代遍历、统一迭代
同时,它将节点的左子节点和右子节点初始化为 NULL。分析一下为什么刚刚写的前序遍历的代码,不能和中序遍历通用呢,因为前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,因为要访问的元素和要处理的元素顺序是一致的,都是中间节点。那么再看看中序遍历,中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了处理顺序和访问顺序是不一致的。原创 2024-04-16 16:44:09 · 1191 阅读 · 0 评论 -
DAY13|239. 滑动窗口最大值、347.前K个高频元素
所以大家经常说的大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),如果懒得自己实现的话,就直接用priority_queue(优先级队列)就可以了,底层实现都是一样的,从小到大排就是小顶堆,从大到小排就是大顶堆。对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口元素就是窗口里最大元素。那么问题来了,定义一个大小为k的大顶堆,在每次移动更新大顶堆的时候,每次弹出都把最大的元素弹出去了,那么怎么保留下来前K个高频元素呢。原创 2024-04-16 00:07:18 · 1180 阅读 · 0 评论 -
DAY10&11|232.用栈实现队列、225. 用队列实现栈、20 1047 150
本题要删除相邻相同元素,相对于20. 有效的括号来说其实也是匹配问题,20. 有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。确实是容易代码越写越乱,原理感觉就这样的,懂,然后代码上手越写越乱,乱糟糟一团,改都改不了。原创 2024-04-15 00:37:20 · 1172 阅读 · 0 评论 -
DAY9|28. 实现 strStr()、459.重复的子字符串
步骤一:因为 这是相等的前缀和后缀,t[0] 与 k[0]相同, t[1] 与 k[1]相同,所以 s[0] 一定和 s[2]相同,s[1] 一定和 s[3]相同,即:,s[0]s[1]与s[2]s[3]相同。步骤三: 因为 这是相等的前缀和后缀,t[2] 与 k[2]相同 ,t[3]与k[3] 相同,所以,s[2]一定和s[4]相同,s[3]一定和s[5]相同,即:s[2]s[3] 与 s[4]s[5]相同。前缀表里,统计了各个位置为终点字符串的最长相同前后缀的长度。原创 2024-04-14 21:45:48 · 1408 阅读 · 0 评论 -
DAY8|344.反转字符串、541. 反转字符串II、151.翻转字符串里的单词
本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。这个很经典很经典,3年前肯定做过,印象非常深,思路都记得,但写不出来。这个模拟,想写的像卡哥一样简洁有难度。原创 2024-04-14 21:02:32 · 624 阅读 · 0 评论 -
DAY7|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
但是我们依旧可以去做剪枝,逻辑变成。本题是使用哈希法的经典题目,而0015.三数之和 ,0018.四数之和 并不合适使用哈希法,因为三数之和和四数之和这两道题目使用哈希法在不超时的情况下做到对结果去重是很困难的,很有多细节需要处理。本题虽然和 两数之和 很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,可以先看视频理解一下 双指针法的思路,文章中讲解的,没问题 哈希法很麻烦。四数之和,和15.三数之和 是一个思路,都是使用双指针法, 基本解法就是在15.三数之和 的基础上再套一层for循环。原创 2024-04-10 15:48:13 · 1315 阅读 · 0 评论 -
DAY6|242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
本题就开始考虑 什么时候用set 什么时候用数组,本题其实是使用set的好题,但是后来力扣改了题目描述和 测试用例,添加了 0 <= nums1[i], nums2[i] <= 1000 条件,所以使用数组也可以了,不过建议大家忽略这个条件。这句话很重要,大家在做哈希表题目都要思考这句话。建议:本题虽然是 力扣第一题,但是还是挺难的,也是 代码随想录中 数组,set之后,使用map解决哈希问题的第一题。建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。原创 2024-04-09 11:46:09 · 587 阅读 · 0 评论 -
DAY4|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题02.07.链表相交、142.环形链表II
卡哥说:有的录友会因为各种各样的事情没跟上进度,时间紧张的录友 可以只把题目AC,博客简单记录思路也可以,甚至是 只把题解看一遍 了解一下思路也可以,但一定要跟上进度,这样才有节奏,如果 大家每日任务落下了 就会一直落下了,很难再追上,然后 自己进度就越来越慢,跟不上节奏,成为群里的旁观者。可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。原创 2024-04-08 08:49:45 · 2002 阅读 · 0 评论 -
DAY03|203.移除链表元素、707.设计链表、206.反转链表
鸡皮题:地址指向的修改是影响的,但是在你的代码中,你只是通过改变pre->next指针的指向来实现删除节点的操作,并没有改变head指针本身的值。卡哥说:还要说明一下,就算使用C++来做leetcode,如果移除一个节点之后,没有手动在内存中删除这个节点,leetcode依然也是可以通过的,只不过,内存使用的空间大一些而已,但建议依然要养成手动清理内存的习惯。如果你希望返回的是修改后的链表头节点,你可以在函数内部维护一个新的指针变量来记录新的头节点,然后在操作结束后返回这个新的头节点。原创 2024-04-06 03:26:46 · 1134 阅读 · 0 评论 -
第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
平方后,左指针=0和右指针=nums.size()-1的值比大小,左小于等于右则右指针左移动,直到左大于右,左大于右,就把左+1到右全都左挪1格,把原来的左放到空出来的右这里。这个第一个思路很能说明问题,说明我对于题目关键信息是没有提取到的,也没有捕捉到双指针的使用方法,整个脑子思维是非常混乱的,非常云,已有条件不利用,没有最好的利用。这是过了测试的代码,漏一个等号耽搁了好久,一直查,查不出来,还怀疑是思路问题,最后调试出来的,发现这个边界不对劲,sum有问题,才发现这个漏掉了等号。原创 2024-04-05 09:38:52 · 1377 阅读 · 0 评论 -
第一天|数组理论基础、704.二分查找、27.移除元素
代码随想录算法训练营第一天原创 2024-04-04 03:53:34 · 1147 阅读 · 0 评论