- 博客(11)
- 收藏
- 关注
原创 代码随想录算法训练营第12天| 递归遍历 层序遍历
1.144.前序遍历(中、左、右)2.145.后序遍历(左、右、中)3.94.中序遍历(左、中、右)1.102二叉树的层序遍历。2.104二叉树的最大深度。3.111二叉树的最小深度。
2026-03-04 20:50:50
193
原创 代码随想录算法训练营第11天 | 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素
滑动窗口在移动的时候就相当于,遗弃左边的一个元素pop()(滑动窗口中移除元素的数值),push()右边的一个元素(滑动窗口添加元素的数值),最后返回最大值。寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)此题用小顶堆,因为大顶堆为了维护k个元素,pop栈顶元素(即最大值)弹出,反而最后保留是频率最少的元素。保持如上规则,每次窗口移动的时候,只要问que.front()就可以返回当前窗口的最大值。进行插入和删除操作。
2026-03-02 12:55:51
984
原创 代码随想录算法训练营第10天|232.用栈实现队列 、225. 用队列实现栈 、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项
当需要取元素时,先把输入栈的所有元素 倒"到输出栈里,输入栈的栈底(最早加入的元素)就会变成输出栈的栈顶,此时从输出栈取元素就符合队列先进先出的规则了。队列的特点是先进先出(FIFO)而栈的特点是先进后出(LIFO)。一个队列在模拟栈弹出元素的时候只要将队列头部元素(除了最后一个元素外)即size--个长度的元素重新加在队列尾部,此时再去弹出元素就是栈的先进后出的顺序了。此题用栈存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素然后再去做对应的消除操作。
2026-02-21 17:04:33
795
原创 代码随想录算法训练营第9天| 151.翻转字符串里的单词 、卡码网:55.右旋转字符串 、459.重复的子字符串
此题两个关键点:1.反转(整体+单个) 2.删除多余的空格。例子,源字符串为:"the sky is blue "2.t=ss掐头去尾(删除第一个字符和最后一个字符)3.在t中找s,如果能找到说明s能由重复子串构成。1.拼接ss=s+s。
2026-02-10 23:19:10
148
原创 代码随想录算法训练营第八天|344. 反转字符串;541. 反转字符串II;54.替换数字
2.对从 i 开始判断能否凑够k个字符,若条件成立反转 当前组的前k个字符,若没有足够的k个字符,反转从i到字符串末尾的所有剩余字符。1.一个指针指向数组的开头(左指针),另一个指向数组的末尾(右指针)3.重复这个过程,直到两个指针相遇或交叉,此时整个数组就被反转了。2.每次交换两个指针指向的字符,然后左指针右移、右指针左移。2.任何数和 0 异或都等于自己,1.任何数和自己异或都等于 0,3.异或运算满足交换律和结合律,1.每2k个字符为一组,分段遍历。
2026-02-09 20:25:51
475
原创 代码随想录算法训练营第七天| 454. 四数相加II,383. 赎金信,15. 三数之和 ,18. 四数之和
3.通过排序后的有序性,移动双指针:如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些;如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止,同时通过跳过重复元素避免结果重复。这样,就把一个四数求和的问题,转变成了找两个数之和的问题,即从。
2026-02-07 23:00:36
1193
原创 代码随想录第六天| 哈希表理论基础 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和
此题选择std::unordered_map 效率更高,map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target),map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。
2026-02-05 23:43:09
876
原创 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点 、面试题 02.07. 链表相交、142.环形链表II
我们可以将慢指针(slow)视为静止的参照物,由于快指针(fast)每次走两步而慢指针走一步,快指针相对于慢指针的移动速度恰好为1,此题是双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步然后让fast和slow同时移动,直到fast指向链表末尾。最后,比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点,否则循环退出返回空指针。本质是求两个链表交点节点的指针,断的是。奇数长度:交换到最后,还剩一个节点,即。
2026-02-02 22:02:11
688
原创 代码随想录第三天 | 203.移除链表元素 | 707.设计链表 |206.反转链表
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)在单链表的核心操作中,增删节点是最常用的场景,而查找节点的效率较低 —— 因为单链表只能从头节点开始逐个遍历,无法直接定位目标节点。无论是增加还是删除节点,需要找到前驱节点,,再修改该前驱节点的next指针指向。为了简化操作,通常会创建一个。
2026-02-01 22:59:07
795
原创 Day2 数组: 209.长度最小的子数组 59.螺旋矩阵Ⅱ
使用滑动串口思想求解,滑动窗口即找到符合条件后固定移动右指针随之移动左指针缩小范围从而寻找到最小子序列,左右指针都要满足单调性只会往一个方向走不会回头。窗口的起始位置如何移动:如果当前窗口的值大于等于s了,窗口就要向前移动了(也就是该缩小了)。,因为负数打破了单调性的本质,无法满足窗口右扩,sum必增大,窗口左缩,sum必减少。窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。用滑动窗口的唯一前提是数值要是正整数。
2026-01-21 23:59:00
336
原创 代码随想录算法训练营第一天|704.二分查找
区间的不同不会影响内存,因为只需主要维护right,left,middle三个变量不会因为区间的不同而开辟新的内存空间。看完视频讲解后再次加深我的理解,加不加等号跟题目区间的开闭有关,一般题目分为左闭右闭和左闭右开两种情况。因为之前有了解过,会想到在数组有序的前提下设定middle来根据target缩短区间进行二分查询。
2026-01-14 23:55:48
59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅