- 博客(14)
- 收藏
- 关注
原创 二叉树part02
这道题用递归 首先判断根节点的左右字数是否相等然后遍历(内部的和内部的比外部的和外部的比,然后判断它俩是不是都为true 如果是则返回true;这道题是找最小的叶子节点 如果为空则并不算深度 ,所以当遍历到空值的时候使用有值的数,其实深度是用后序遍历是比较舒服的因为判断完左右孩子的深度然后加一就是父节点的深度,这道题我用的层序遍历 ,把每一层的节点都放入栈中 然后反转它们的左右子树,所以先递归到最后一个点然后依次把他们的值赋给父节点。所以比最大值多了一个判定是否为叶子节点的过程。
2024-09-25 21:06:45
410
原创 代码随想录算法训练营第四十六期DAY11
这道题用队列,每次循环一次进行push,pop操作,push操作把比他小的还在他前面的都pop掉,因为我们取最大值取队列的首元素就行了,pop操作则是按位次决定的而不是光pop队首元素如果队首恰好是那一位则直接pop出去。一看这种题首先想到的是栈,然后这道题容易犯的错误是 谁是被除数和除数,有人直接把第一个元素当成大的那个,其实是第二个。我就是因为这个错误一直运行失败。然后还有就是入栈的时候把string类型变成int类型。有重复的代码 可以换一种方式过滤掉。
2024-09-23 20:30:12
229
原创 代码随想录训练营Day10 | 栈与队列理论基础 | 232.用栈实现队列 | 225. 用队列实现栈 | 20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项
这道题完全符合栈的情况,当要传入数据时,判断是否与栈顶元素相等,如果相等则pop如果不等则push,输完以后 不是需要输出吗 因为栈的元素都是相反的,然后在创一个栈把顺序调过来。所以要完成进元素的操作,它俩都是加入尾部。而出元素则需要另一个栈进行实现。最主要的还是pop操作,也需要两个队列,把除队尾的元素其他的都给了另一个队列,删完以后 q1 = q2 把q2 在赋给q1 就行了。peek操作的话,(这里很重要,不能直接用top,会报错 因为,如果为空呢第二个栈,所以调用pop,然后在加上res就行了。
2024-09-23 19:43:16
443
原创 代码随想录算法训练营第8,9天字符串类型
(这句话重点理解以下) 前缀表的第一个元素是下标为0,末尾就是最后一个重合的位置 比如 abcabc 012345 当i = 5时 j = 2 它们两个分别是前缀表 和后缀表的末尾。这道题记住目前不是多么的理解 只知道这样写不会错 就是 s有重复的字串 ,2s去头去尾一定能找到s 就是说比如 字串是1/2s 当2s时被夹在中间的一定是s。首先要去除多余的空格使用快慢指针方法,快指针只会在有字母的时候把值赋给慢指针,当第二次遇到空格的时候慢指针加一个空格就行了。其他的都是反转k个。
2024-09-21 20:04:19
312
原创 day29 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列
我这个代码的思路是先判断加油是不是大于所消耗的油,如果大于则可以,然后 逐个找 然后是否可以跑一圈 ,如果在i处加油小于耗油的话这不用判断 i之前的了因为 只要能移动到i则能说明i-1肯定是大于的。所以不管从i之前的那个地方移动 都不符合题意 start直接到i+1。这道题一般真想不到,和需要遍历2次,第一是把身高排下来,第二次是依次根据排名插入,因为是按身高排的所以后面的如果插到前面来,不会影响后面的顺序因为按身高排的,之前比他高的排名并不会变。这道题把每种情况一一列举出来就行了。
2024-08-14 19:07:30
366
原创 Day28 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和
这道题还有简单的思路 不用求波峰和波谷 不是获得利润吗,利润肯定是正收益 所以后一天的价格减去前一天的价格 如果有涨就是正收益,反之。求出它们的波峰波谷 波峰减去波谷就是利润,然后当最后2个是波谷的时候,如果最后一个比最后2个大 则也能得利润 所以我在最后的时候判断了一下。如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。这道题和昨天写的摆动序列有点像,都是求波峰和波谷的,可以用那种办法,我就是用的那种办法。这道题和那道题类似,
2024-08-13 17:12:47
897
原创 Day27.贪心算法
这道题思路就是找波峰和波谷,然后需要考虑的是单调的时候怎么办 这个 preDiff = currDiff;写到if里面就是为了找到下一个相反的点 比如波峰 然后下个位置是波谷的时候才能进到if里面去。
2024-08-12 19:05:00
231
原创 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字
【代码】344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字。
2024-07-26 19:02:56
216
原创 Day7 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
【代码】Day7 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和。
2024-07-25 22:45:00
243
原创 代码随想录算法训练营第四天 | Leetcode 24 两两交换链表中的节点 Leetcode 19 删除链表的倒数第N个节点 02.07 链表相交 Leetcode 142 环形链表II
这道题用了双指针 (快慢指针)通过快慢指针的位置来找到需要删除的位置比如倒数第2个位置怎么找到 让快指针比慢指针多走2格 所以慢指针的后一个位置就是需要删除的位置。先拿n为1的情况来举例,意味着fast指针在环形里转了一圈之后,就遇到了 slow指针了。用双指针法 定一个快指针和一个慢指针 快指针走2格 慢的走一格 ,如果有环他们就会相遇,,n为fast指针在环内走了n圈才遇到slow指针, (y+z)为 一圈内节点的个数A。也就是在相遇节点处,定义一个指针index1,在头结点处定一个指针index2。
2024-07-21 22:55:01
927
1
原创 代码随想录算法训练营第三天| 203.移除链表元素 707.设计链表 206.反转链表
失误:STL不熟悉导致代码格式写不正确。就是把链表箭头反向 也相当于插入的变形。今日最大收获是学会了虚拟头节点。203.移除链表元素。要注意插入操作的顺序。
2024-07-20 23:13:56
164
原创 代码随想录算法训练营第二天 | Leetcode 977 有序数组的平方 Leetcode 209 长度最小的子数组 Leetcode 59 螺旋矩阵Ⅱ
虽然暴力法好写但时间复杂度有点高,所以今天使用的方法叫双指针法,先分析这道题目,在数组两边的数据的平方一定是最大的,所以一个指针指向数组的头,一个指针指向数组的尾部,然后把它俩最大的放入结果数组的最后面,然后大的数据向小的数据的方向移动。
2024-07-18 23:06:28
700
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
LeetCode 第704题 是一道最经典的使用二分法查找元素位置的题,这道题是一道非常基础的题,它的核心是把数据分成2部分,算法的时间复杂度就减小。这道题并没有我想象中那么好做 因为我之前没看题解的大体思路是对的,但是我考虑的方向是递归,但递归却无法正常调用 因为left ,right已经声明过了,所以没想出来,看了下题解发现直接用循环就可以。LeetCode 第27题 移除元素写这道题之前首先先要了解数组的删除操作的本质是什么,本质其实是覆盖,让后面的数据进行覆盖前面的数据这样就是数组的删除。
2024-07-17 16:44:57
377
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅