Leetcode 牛客题型
总结题型巩固自身
A.A呐
拼搏百天,我要当无情的写博客机器
展开
-
LeetCode 692.前K个高频单词
首先用map存储该字典,然后放进vector进行排序,注意sort的排序规则与我们想要的规则不一致,所以我们需要写一个伪函数来判断second(value值),由于该题要求了稳定性,所以我们在伪函数还需要继续判断相等情况的顺序。排完序后用vector将前k个单词存储起来返回。原创 2024-09-13 16:27:12 · 192 阅读 · 0 评论 -
牛客JZ36 二叉搜索树与双向链表 C++
由图所示,我们看出该链表走的是中序,所以我们可以使用的方式来解决这个问题,在遍历过程中,我们创建一个,来进行链接。并且,我们需要判断前驱结点的情况,不然当走到空时,再链接就会发生错误,当,否则直接回到后继结点,不进行操作。原创 2024-09-08 22:29:39 · 323 阅读 · 0 评论 -
LeetCode 236.二叉树的最近公共祖先
那么我们可以根据情况判断,需要用到,root为当前所开始的结点,p、q为需要寻找的结点。当p、q有一个等于root时,可以直接返回root。当p、q分布在两边时,我们可以用一个函数判断,去。,我们需要将,最后出现时,返回root结点,该结点为最近公共祖先。如果,那么需要去。不过这种方式时间复杂度会很高,因为有树全偏向一边的情况。原创 2024-09-06 18:32:17 · 494 阅读 · 1 评论 -
LeetCode 105.从前序与中序遍历序列构造二叉树
由题,,那么我们可以进行第一次判断——根为3,左子树为9,右子树为15,20,7。可以利用递归,进行每个结点的判定,比如右子树为15,20,7,而前序顺序为20,15,7,所以可以判断右子树根为20,再一次用中序得出左子树为15,右子树为7,以此类推…我们可以用rooti(中序数组下标)来,由此反复递归直到整棵树遍历完,就能够构造一颗二叉树了。原创 2024-09-04 22:28:03 · 379 阅读 · 0 评论 -
LeetCode 606.根据二叉树创建字符串
根据示例发现,当,因为分不清到底是左为空还是右为空,所以我们在解题时需要判断结点的左右情况。题目要求(根左右),我们可以用传并赋给str,。然后开始走左边,这里要判断一下,如果那么我们就需要,当走到空或者函数走完时就回到上一次递归,开始遍历右边,右边只需要判断是否为空,不为空就进行递归。当遍历完该树后,str就是前序字符串。原创 2024-09-04 22:10:15 · 370 阅读 · 0 评论 -
LeetCode LCR088.使用最小花费爬楼梯
动态规划原创 2024-09-03 18:29:17 · 1102 阅读 · 0 评论 -
牛客 BC153数字统计 C++
用枚举+数字拆分的方式,模10取到该位数字,除10去除该位数字,再取模拿到下一位数字。for循环对L到R的每个数字进行拆分,如果拆出来的数字为2就++一次ret。原创 2024-08-29 14:54:40 · 188 阅读 · 0 评论 -
牛客 点击消除 C++
可以用的思路,但我们这里用,创建一个str为输出字符串,s接收字符串,然后开始对比,如果str的尾部(可以说是栈顶)与遍历到的接收字符串相等,那么就删除(出栈),否则插入(入栈),当s遍历完成,str就是最终消除的结果。原创 2024-08-29 14:37:14 · 257 阅读 · 0 评论 -
牛客NC313 两个数组的交集 C++
用哈希表存储第一个数组,再和第二个数组对比,对比成功就添加到新的数组中,再将哈希表的该位置变为false,防止重复添加。这里数据范围仅有1000,所以我们可以自己创建一个bool数组来当哈希表,节省new的时间。原创 2024-08-28 16:32:14 · 167 阅读 · 0 评论 -
LeetCode 19.删除链表的倒数第N个结点 C写法
我们先创建一个哨兵位,这样便于我们头删,然后利用,一个指针(带哨兵位要多走一步),然后,当先走的指针结束,那么后走的指针下一个就是我们要删除的结点,最后用新的头结点接收即可。原创 2024-08-10 23:03:28 · 356 阅读 · 0 评论 -
LeetCode 150.逆波兰表达式求值
用,如果,当整个字符串遍历完后,栈顶值就是该表达式的值。原创 2024-08-09 14:31:30 · 336 阅读 · 0 评论 -
LeetCode 102.二叉树的层序遍历 C++
用,要获取每层结点个数,可以创建一个变量levelsize,读取队列所存储的结点个数。原创 2024-08-06 22:51:15 · 267 阅读 · 0 评论 -
牛客 JZ31.栈的压入,弹出序列 C++写法
创建一个栈,push压入序列,然后用,如果,直到压入序列走完,如果栈为空了就说明匹配成功,否则失败。原创 2024-08-06 22:50:27 · 254 阅读 · 0 评论 -
LeetCode LCR147.最小栈
建立两个栈,一个栈正常入栈出栈,一个栈,当push值小于minst栈顶才入栈,当pop值等于minst栈顶才出栈。原创 2024-08-05 09:56:55 · 239 阅读 · 0 评论 -
LeetCode 572.另一棵树的子树 C写法
可以用上的方法,,如果有一轮比较成功就表示root包含subroot。原创 2024-08-02 20:41:30 · 295 阅读 · 0 评论 -
LeetCode 965.单值二叉树 C写法
用的方式,如果,如果走完一颗子树,结点为空了就返回true到上一层递归,直到左右子树全部走完,。原创 2024-08-01 12:57:40 · 359 阅读 · 0 评论 -
牛客 KY11.二叉树遍历
我们接收字符串以后,创建一个,然后就可以开始建立树,如果是新的结点去存储,是**'#'就返回空**,最后用以的顺序创建结点。树建立完成后,再用中序遍历一次即可。原创 2024-08-01 12:56:34 · 212 阅读 · 0 评论 -
LeetCode 144.二叉树的前序遍历 C写法
遍历很简单,但是我们需要开空间进行值的存储,,开好空间就可以用数组进行值的存储,,否则当一边子树递归完开始递归另一边子树时,。原创 2024-07-31 09:02:16 · 436 阅读 · 0 评论 -
LeetCode 101.对称二叉树 C写法
将该树一分为二,左子树的左边与右子树的右边比,左子树的右边与右子树的左边比,不相等或者一边为空则不是对称。原创 2024-07-31 09:01:46 · 242 阅读 · 0 评论 -
LeetCode 17.电话号码的字母组合 C++写法
深度优先搜索+递归原创 2024-07-30 13:30:58 · 306 阅读 · 0 评论 -
LeetCode 100.相同的树 C写法
考察的,前序遍历看或者,不相等就返回false,相等就递归下去,直到两边结点都走完。前序遍历可以先判断根结点是否相等,效率要更高一点。原创 2024-07-27 20:25:03 · 247 阅读 · 0 评论 -
LeetCode 118.杨辉三角 C++写法
我们使用vector来进行解答,该题规律简单,观察一下就可以发现,。难一点的是数据存储方式,C语言需要用到,C++需要用到。如图所示,vector返回的是,vector返回的才是,我们要访问具体数据时,也需要用到访问二维数组的方法,如:a[i][j],。与C语言不同的是,C语言是对,vector是对。原创 2024-07-27 19:43:02 · 271 阅读 · 0 评论 -
LeetCode 622.设计循环队列 C写法
首先我们要清楚循环队列的逻辑结构,队尾应该在队头的,否则就会。其次这题要求返回队尾元素,而用链表不好找尾,所以用比较合适。创建三个变量,一个存储头的下标(front),一个存储尾的下标(rear),一个存储队列长度(k)。,如果。当rear或者front,那么可以进行置0,又从头开始走,具体思路可以看代码。原创 2024-07-23 01:05:51 · 355 阅读 · 0 评论 -
LeetCode 415.字符串相加 C++写法
首先不能用stoi和tostring来做,如果给一个很大的数那一定存不下。我们可以,创建一个变量用于计算下一位数,之后,每一位,完成所有尾插后用就是我们要得到的结果。原创 2024-07-23 01:04:33 · 355 阅读 · 0 评论 -
LeetCode 58.最后一个单词的长度 C++
如果最后字符为空格下标就往后移动,直到不为空格才停止,然后用。原创 2024-07-22 17:08:55 · 443 阅读 · 0 评论 -
LeetCode 125.验证回文串 C++写法
我们,这样效率太低了,所以可以,下标begin和end遇到的就,当两边字母就进行,一样就继续往后走,不一样就返回false。原创 2024-07-22 17:09:43 · 568 阅读 · 0 评论 -
LeetCode 917.仅仅反转字母 C++写法
运用找是字母的下标,,两边都找到就交换位置然后继续走。原创 2024-07-21 10:15:56 · 307 阅读 · 0 评论 -
LeetCode 232.用栈实现队列 C写法
栈代码在中。与队列实现栈类似,不过这里我们,不需要再来回导数据。原理在于,而颠倒的数据就是队列要出队的顺序。具体思路可以看代码注释。原创 2024-07-19 22:37:45 · 179 阅读 · 0 评论 -
LeetCode 387.字符串中第一个唯一字符 C++写法
最简单的方法就是用,每个字符出现一次就+1,直到结束。之后再遍历一遍,当遍历到第一个计数为1的字符,就是唯一出现的字符。原创 2024-07-19 21:24:47 · 264 阅读 · 0 评论 -
LeetCode 225.用队列实现栈
该题所用队列代码在中。我们创建两个队列q1和q2,,入栈就将数据导入在不为空的队列中(如果两个都为空就随便入一个)。出栈时,栈是先进后出,那么就是删除队尾,此时可以,只剩下最后一个要出栈的数据,按照这个思路来回导入数据即可用队列实现栈。具体步骤看代码注释。原创 2024-07-18 01:09:28 · 341 阅读 · 0 评论 -
LeetCode 20.有效的括号 C写法
这题最优思路是用来进行,如果是就,如果是右括号那么就,匹配成功就继续入栈或者出栈,。不过C语言没有STL库,所以我们要手写一个(栈代码都在该篇博客中)出来。原创 2024-07-15 20:39:33 · 484 阅读 · 1 评论 -
牛客 JZ64.求1+2+3+...+n C++做法
C++讲解原创 2024-07-15 16:30:02 · 361 阅读 · 0 评论 -
LeetCode 面试题02.04.分割链表
一段放小于x的值,另一段放大于x的值。开辟四个指针lesshead、lesstail、greaterhead、greatertail,head为哨兵位,防止链表为空时情况过于复杂,tail为尾结点,将链表的值进行大小判断后。完成分段,分段后再链接,最后释放哨兵位完成整个链表的分割。原创 2024-07-13 18:57:33 · 329 阅读 · 0 评论 -
LeetCode 142.环形链表2 C写法
用的方法,快慢指针slow和fast的,此时与的。 我们假设头到入口点的长度为L,环的长度为C,相遇点到入口点的长度为X。那么我们可以计算出在相遇时,fast走了步(其中n为fast走的圈数),slow走了步,且fast步数是slow的,进一步得出等式,化简后得到L = n*C -X,然而n无论走多少圈,最后还是在相遇点,所以可以把n看做1,最后得。,等式成立,推出该方法。原创 2024-07-13 17:52:24 · 473 阅读 · 0 评论 -
LeetCode 141.环形链表 C写法
利用快慢指针,快指针走两步,慢指针走一步,如果没有环,快指针走完就返回false,如果有环,那么快指针一定先进环,等慢指针进环以后快指针对慢指针进行。 不过这仅是快指针走两步的情况,假设快指针与刚进环的慢指针距离设为n,快指针走三步,慢指针走一步,那么每次循环后距离为n-2,,进入新的一轮追击。如果环的长度为C,此时快指针与慢指针距离为C-1,若C-1也为。 慢指针进环以后,每一次循环快指针与慢指针的距离。,直到与慢指针相遇,此时就能判断该链表带环。的话,n则无法整除2,最后一定会。原创 2024-07-12 14:31:10 · 394 阅读 · 0 评论 -
LeetCode LCR027.回文链表 C写法
通过快慢指针找到中间结点,再将中间结点后的所有结点反转。如果是回文链表那么中间结点往后的值与头结点到中间结点的值都相等,如果有不相等的就不是回文链表。原创 2024-07-11 16:57:52 · 466 阅读 · 0 评论 -
LeetCode LCR024.反转链表 经典题目 C写法
使用三个指针,n1,n2,n3,n1为空,n2为头结点,n3为头结点的next。开始反转后,n1赋值给n2的next,n2赋值给n1,n3赋值给n2找到下一个反转的结点,n3找它的next遍历。如此迭代就完成了反转。 创建两个指针rhead和cur,rhead作为新的头,cur进行链表遍历,将每个结点头插在rhead上。原创 2024-07-11 16:55:06 · 420 阅读 · 2 评论 -
LeetCode 88.合并两个有序数组 C写法
定义三个变量来控制下标,end1控制nums1的已有元素,end2控制nums2,i控制整个nums1。如果nums1[end1]的值大于nums2[end2]的值,则将end1的值赋给nums1[i],如果end2大于end1,则直接将end2的值尾插在nums1中,尾插完后再下标向前移动,继续判断大小并且尾插。 由题nums1的长度为m+n,则我们不需要开辟新的数组去存储元素。题目要求要有序合并,于是可以判断哪边数更大,将更大的数。原创 2024-07-10 17:45:22 · 313 阅读 · 0 评论 -
LeetCode 203.移除链表元素 C做法
由于是单链表,所以我们可以创建一个新的头结点newhead,把不是val的结点尾插在newhead中,而等于val的结点给释放,最后返回newhead。防止时间复杂度过高,我们再创建一个尾指针tail保存最新的尾插地址,这样仅需遍历一次就能完成尾插。原创 2024-07-09 16:17:23 · 163 阅读 · 0 评论 -
LeetCode 21.合并两个有序链表
创建一个头结点和一个尾节点,然后对两个链表的值进行比较,尾指针去找更小的值进行尾插,找到后链接起来,然后该链表走到下一个结点。依次比较遍历直到有一个链表结束。如果另一个链表还没有结束,那么尾指针的next直接指向该链表完成尾插。原创 2024-07-09 16:19:37 · 261 阅读 · 0 评论