
LeetCode
文章平均质量分 52
我还是学习吧
这个作者很懒,什么都没留下…
展开
-
string类题目
字符串中的第一个唯一字符字符串相加class Solution {public: int AddItem(int a, int b, int& sign) { int sum = a + b + sign;//对应位相加时把进位算上 if (sum >= 10) { sum -= 10; sign = 1;//发生进位则标为1 } else//对应位相加没有进位则把sign复位 { sign = 0; } return sum;原创 2022-02-26 15:46:18 · 328 阅读 · 0 评论 -
LeetCode题解|101.对称二叉树
题目描述及链接对称二叉树题解只要根节点不为NULL,那么问题就转换为了根节点的左右子树是否对称,和判断两个树是否相等是一样的思路,只是这里需要把一棵树的左子树和另一棵树的右子树比较。由于处理第一种情况和处理后面的情况不一样,不能直接原函数递归,所以写了子函数来比较对称位置是否相等。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left;原创 2021-11-20 19:35:35 · 225 阅读 · 0 评论 -
LeetCode题解|572.另一棵树的子树
题目描述及链接另一棵树的子树题解核心思路:把原树的每个子树都和subtree比一下(直到遇到相等的)是否相等。还有一个重要的点是:比到什么时候停止?由于subtree不为空,所以当比到子树为空时,就返回false。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right;原创 2021-11-20 19:20:25 · 113 阅读 · 0 评论 -
LeetCode题解|110.平衡二叉树
题目描述及链接平衡二叉树题解首先判断当前结点是否满足平衡二叉树条件,满足再看其左右子树,不满足直接return false。注意要考虑到必题目例子更复杂的情况,比如而不要从题目的例子得到只要根节点左右子树深度相差不大于1就是平衡二叉树的错误结论。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct T原创 2021-11-20 18:23:19 · 290 阅读 · 0 评论 -
牛客KY11——二叉树的构建和遍历
题目描述及遍历二叉树的构建和遍历题解本题是IO型OJ题,需要自己设计函数。从需求上看,要构建二叉树,所以要先写二叉树结构定义;构建二叉树的功能可以写成一个函数;中序遍历再写成一个函数;在main函数接收数据。思路:输入字符串的顺序是前序遍历的结果,那么构建二叉树的过程就是二叉树前序遍历的逆过程。把题目给的例子写成二叉树就是如下形式二叉树结构struct TreeNode{ struct TreeNode* left; struct TreeNode* right原创 2021-11-20 18:07:14 · 1028 阅读 · 1 评论 -
LeetCode题解|100.相同的树
题目描述及链接相同的树题解拆解成子问题就是看当前结点是否两个都是空,都是就返回true,一方面处理空树,另一方面处理空子树;再看是否一个为空一个不为空,若一个为空另一个不为空,则结构不同,直接返回false;如果当前结点都不为空且相等,则分别比较左子树是否相等、右子树是否相等,结果取两者的并。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode原创 2021-11-20 17:12:50 · 213 阅读 · 0 评论 -
LeetCode题解|144、94、145.二叉树的前中后序遍历
题目描述及链接二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历题解前序遍历:遇到空结点直接返回,否则先访问该节点,再依次访问左孩子和右孩子。中序遍历:遇到空结点直接返回,否则先访问左孩子,再访问该节点,最后访问右孩子。后序遍历:遇到空结点直接返回,否则先依次访问左右孩子,再访问该节点。这里题目要求把访问结果放在数组中,所以这里先计算二叉树的节点个数来开辟数组。/** * Definition for a binary tree node. * struct TreeNode {原创 2021-11-20 17:00:34 · 364 阅读 · 0 评论 -
LeetCode题解|226.翻转二叉树
题目描述及链接翻转二叉树题解注意翻转是要求把结点翻转,而不是把结点的值翻转。思想:观察可发现,只要把每个子树的左右孩子交换位置,就可以实现将整棵树翻转。空树(空子树)不需要翻转,直接return。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */原创 2021-11-20 16:47:40 · 124 阅读 · 0 评论 -
LeetCode题解|104.二叉树的最大深度
题目描述及链接二叉树的最大深度题解二叉树的深度都是用递归计算,可以用返回值,也可以用参数带回。这里写返回值的方法。思想:二叉树深度=左子树深度与右子树深度较大者+1/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */int maxDepth(s原创 2021-11-20 16:36:08 · 226 阅读 · 0 评论 -
LeetCode题解|965.单值二叉树
题目描述及链接单值二叉树题解由于非单值二叉树的情况远多余单值二叉树的情况,所以主要从对立事件出发,一旦满足非单值二叉树的条件直接返回false。核心思路:从根节点出发,看每个子树的根节点的值与其两个孩子(若果存在的话)的值是否相等,不相等直接返回false。利用相等的传递性,若每个子树的根节点都和左右节点相等,则这个二叉树是单值二叉树。需要注意的是,返回值并不是直接返回最外层,无论是true还是false都会逐层向上返回。单值二叉树每次返回都必须是true。/** * Definiti原创 2021-11-20 16:26:27 · 92 阅读 · 0 评论 -
LeetCode题解|225.用队列实现栈
题目描述及链接用队列实现栈题解用C语言写本题需要先自己实现队列,这里我直接拷贝课堂上实现队列的代码typedef int QDataType;typedef struct QueueNode{ struct QueueNode* next; QDataType data;}QueueNode;typedef struct Queue{ QueueNode* head; QueueNode* tail;}Queue;void QueueInit(Queue* pq);v原创 2021-11-09 11:52:12 · 97 阅读 · 0 评论 -
LeetCode题解|232.用栈实现队列
题目描述及链接用栈实现队列题解用C语言实现本题需要先自己实现栈,这里我直接拷贝课堂上实现栈的代码typedef int STDataType;typedef struct Stack{ STDataType* a; int top; int capacity;}ST;void StackInit(ST* ps);void StackDestroy(ST* ps);void StackPush(ST* ps, STDataType x);void StackPop(ST* ps原创 2021-11-09 10:45:35 · 420 阅读 · 0 评论 -
LeetCode题解|622.设计循环队列
题目描述及链接设计循环队列题解本题可以用数组实现,也可以用链表实现。这里使用数组(动态数组)实现。先定义结构typedef struct { int* a; int front; int tail; int k;} MyCircularQueue;a表示表示动态数组,front指向队列第一个元素,tail指向队列最后一个元素,k表示队列可用长度。接下来初始化队列初试时,应该使用malloc开辟一个MyCircularQueue结构体,并给这个结构体中的原创 2021-11-09 10:14:29 · 182 阅读 · 0 评论 -
LeetCode题解|142.环形链表2——找到环形链表环的入口
题目描述及链接环形链表2——找到环形链表环的入口思路1从思路1的角度看,这题的本质是一道几何题。这里同样采用快指针一次两步,慢指针一次一步来判断是否有环。关键是证明从快慢指针相遇点开始每次走1步,和从链表起始位置开始走,每次走1步,则两个指针会相遇。证明:于是可写出如下代码思路1代码思路2在相遇点处,剪断相遇结点与下一个结点的链接,那么这题就转换成了前面写过的链表相交问题。代码如下思路2代码总结本质上看,这题同样是快慢指针妙用。以上两种方法让我们进一步了解环形链表的特原创 2021-10-26 18:04:05 · 191 阅读 · 0 评论 -
LeetCode题解|141.环形链表1——判断链表是否有环。快慢指针!
题目描述及链接环形链表1——判断链表是否有环解题思路环形链表不存在NULL作为结束如果不存在环,则遍历链表会遇到NULL;但是在遇到NULL之前我们并不知道是否存在NULL,因此无法通过遍历来确定是否有环,这时本题的难点。我们可以采用快慢指针,如果有环,则快指针会追上慢指针;如果没有环,则快指针会遇到NULL(快指针是跳跃地前进的,因此也要判断快指针跳过的是不是NULL)我们这里让快指针一次走两步,慢指针一次走一步,不难写出代码。代码证明在有环的情况下,为什么快指针一定能和慢指针相原创 2021-10-26 17:21:32 · 195 阅读 · 0 评论 -
LeetCode题解|160.相交链表
题目描述及链接相交链表解题思路思路1:穷举依次取链表A的结点,用它与链表B的每一个结点比较,如果相等,则说明两个链表相交,同时说明这个第一次相等的结点就是相交结点。最坏情况是两个链表不相交,此时时间复杂度O(n^2)。思路2:两个链表相交的长度不可能大于短的链表的长度。由此想到先算出两链表的长度,再同时遍历比较每个结点于是写出如下代码:再次基础上我们又意识到:两个单链表相交等价于它们的尾结点相同。通过用tailA、tailB分别遍历A、B链表,拿到尾结点并比较便可直到是否相交;同原创 2021-10-26 16:32:41 · 215 阅读 · 0 评论 -
牛客OR36.链表的回文结构
题目描述及链接链表的回文结构解题思路把链表分成两段,并且后半段逆置。再用curA和curB同时遍历这两段链表,若出现不相等的结点则不是回文链表;若是回文结构,则通过画图分析可知,当有奇数个结点时,curA和curB会同时到达NULL;当有偶数个结点时(必须取靠右的作为mid),curB到达NULL时就是回文结构。图示完整代码关于逆置链表和找中间节点的函数,请复习前面的文章。总结本题的难点在于想到把链表从中间分成两段并同时遍历比较。具体写代码的过程再完善对于奇数个结点、偶数原创 2021-10-26 15:30:54 · 239 阅读 · 0 评论 -
LeetCode题解|86.分隔链表——通过两个链表合并实现
题目描述及链接分隔链表解题思路如果题目不要求保持原来数据的相对位置,则看可以通过1.创建一个新链表newHead。2.小于x的结点头插,大于等于x的结点尾插到新链表。3.返回新链表。来实现。考虑到要保留原来结点的相对位置,则考虑1.创建两个链表一个存小于x的结点,另一个存大于等于x的结点。2.通过一个指针指向cur当前结点遍历链表,小于x的结点尾插到一个链表;其余的尾插到另一个链表。3.最后合并这两个链表即可。这种实现有几个细节需要注意:a.后面的链表插入到...原创 2021-10-26 14:18:15 · 117 阅读 · 0 评论 -
LeetCode题解|88.合并两个有序数组
问题描述及链接合并两个有序数组解题思路思路1.先把两个数组合并再排序这种方法最容易想到,但是排序所需时间复杂度高。思路1代码思路1结果思路2.从后向前插入与单链表不同,数组这种来连续的物理储存结构可以很容易的访问当前元素的前一个元素,也即很容易头插。思路2代码思路2结果总结可以对比合并两个有序链表那题。合并有序链表不适合从后向前插入,因为单链表难以找到当前链表的前一个结点,但是创建一个新链表只要创建一个指针再不断插入就可以了,这不会增加空间复杂度。相应的,创建数组会影响原创 2021-10-26 11:26:44 · 96 阅读 · 0 评论 -
LeetCode题解|26.删除有序数组中的重复项——快慢指针典型题
题目描述及链接删除有序数组中的重复项解题思路方法1.三指针一个src1保存写入的前一个值,用于判断下一个是否不是重复数字。一个src2用于遍历数组。一个dst用于指向当前可以写入的位置。动图演示完整代码运行结果方法2.三指针这里只是写法上和方法1稍有不同,本质和写法1一样。动图演示完整代码运行结果方法3.快慢指针实际上方法1和方法2中的dst和src1的功能可以用一个指针(下标)来完成。用i来指向当前可以写入的位置,并且用i前一个元素来判断j所指的数字是否原创 2021-10-23 22:18:52 · 155 阅读 · 0 评论 -
LeetCode题解|27.移除元素——双指针的两种解法
题目描述及链接移除元素解题思路思路1.交换元素定义两个下标left、right。根据本题的特点,可以把要删除的元素与数组最后一个元素交换。当nums[left]!=val时,left向右移一位(left++),right不动。当nums[left]==val时,nums[left]与nums[right]交换,right向左移1位(right–),left不动。当left>=right时,循环结束。若nums[left]等于val,则返回right;若nums[left]不等于v原创 2021-10-23 21:00:38 · 96 阅读 · 0 评论 -
LeetCode题解|189.旋转数组
题目描述及链接旋转数组解题思路无论哪种思路,都先将k模等于numsSize,因为逆置numsSize等于没有逆置。思路1.一次逆转1个元素,逆转k次这种方法最容易想到,但是时间复杂度为O(k*n),在这一题中会超时。完整代码运行结果思路2.创建临时数组创建一个和原元素组一样大的临时数组tmp,把后k个先放到临时数组前k个位置。再把前numsSize-k个拷贝到临时数组后numsSize-k个位置。最后再把tmp中的数据拷贝到原数组中。这种方法是以空间换时间,时间复杂度为O(n原创 2021-10-23 20:09:46 · 95 阅读 · 0 评论 -
LeetCode题解|面试题17.04.消失的数字——异或等4种方法
题目描述及链接消失的数字参数解释nums是传入的数组(大小为numsSize),numsSize是传入数组元素的个数(同时也是完整数组最大的数)。由于完整数组是从0到numsSize,所以完整数组的大小是numsSize+1。理清这一点对于思路2思路3很重要。解题思路思路1先排序,遍历数组,当遍历过程中当前数字不等于前一个数字+1时,这个数字-1就是缺失的数字。但是排序的时间复杂度超过O(n),在这题不合适。思路2把数字从0到numsSize累加到变量sum中,再减去传入数组数字的原创 2021-10-23 18:22:51 · 314 阅读 · 0 评论 -
LeetCode题解|剑指offer56-I.数组中数字出现的次数——利用异或找数字
文章目录题目描述及链接题目参数解释解题思路完整代码走读代码总结题目描述及链接数组中数字出现的次数题目参数解释nums是传入的数组,numsSize表示数组中数字个数,returnSize是一个返回型参数,表示返回数组的元素个数。本题我们需要返回一个整型数组,这个数组通过malloc创建,题目假设函数调用者来释放这个数组。解题思路异或规则:两个整形异或,根据他们的二进制位,相同则结果的这一位为0,相异则这一位为1。任何整数和0异或得到的还是这个数。两个相同的数字异或得到0。因此,对于一原创 2021-10-23 17:46:26 · 229 阅读 · 0 评论 -
LeetCode题解|21.合并两个有序链表
题目描述及链接合并两个有序链表解题思路定义两个指针变量,head始终指向头节点,用于返回;tail指针随着结点尾插进来而移动。依次比较两个链表相应结点的值,根据比较结果决定哪个结点插入。当其中一个链表到尾时直接将另一个链表剩下部分插在合并链表的尾部。链表head一开始没有指向任何结点,第一个合并进来的结点需要特殊处理。当然也可以采用有哨兵结点的单链表,使用含有哨兵结点的单链表可以将头节点和中间结点统一处理,需要注意的是最后要记得释放这个哨兵结点。动图演示完整代码运行结果总结核原创 2021-10-23 16:53:14 · 122 阅读 · 0 评论 -
剑指offer——链表中倒数第k个结点|快慢指针解法
题目表述及链接链表中倒数第k个结点解题思路倒数第k个就是正数第num+1-k个。快指针fast先走k步,则fast再走num-k步到达NULL。慢指针从第一个开始走num-k步到达第num+1-k个。动图演示完整代码运行结果总结本题是快慢指针类型题的变体。...原创 2021-10-23 16:16:00 · 121 阅读 · 0 评论 -
LeetCode题解|876.链表的中间节点——快慢指针解法
题目描述及链接链表的中间结点解题思路思路1.遍历并计算出中间结点位置先遍历一边链表,计算出链表结点个数num,以此计算出中间结点是第pos个结点。再一次从头往后遍历到第pos个结点并返回这个结点的地址。思路1图示思路2.快慢指针快指针fast一次走两步,慢指针slow一次走一步。当快指针的next为NULL(奇数个结点的情况)或快指针fast为NULL(偶数个结点的情况)时,慢指针slow的位置就是中间节点位置。思路2完整代码思路2结果总结本题是快慢指针的典型例子。...原创 2021-10-23 15:44:12 · 117 阅读 · 0 评论 -
LeetCode题解|206.反转链表
题目描述及链接反转链表解题思路方法1.依次反转链表指向使用三个指针来维护原链表,使用while循环依次反转结点指向。循环结束条件是n2指针为空指针。方法1动图演示原创 2021-10-23 15:20:01 · 107 阅读 · 0 评论 -
LeetCode题解|203.移除链表元素
题目描述及链接原创 2021-10-23 13:59:02 · 112 阅读 · 0 评论