
Leetcode 牛客题型
总结题型巩固自身
A.A呐
拼搏百天,我要当无情的写博客机器
展开
-
牛客 226303 【模板】差分
本篇将对差分算法进行基本认识,差分算法是一种通过(差分)来优化计算或解决问题的策略,核心思想是通过,从而简化计算或提升效率。构建差分数组diff,其中。对区间[L, R]增加k(若存在)。通过,此时由于从L开始增加了k,还原后依然增加k,R+1之后减去k,则之后的元素将会还原,时间复杂度降为O(1)单次操作。原创 2025-04-08 18:23:43 · 303 阅读 · 0 评论 -
LeetCode 面试题 17.19. 消失的两个数字
运用,我们先创建一个变量tmp,nums和1~N所有整数,此时就可以得到两个数的异或值。然后通过,逐位检查tmp中的每一位,找到第一个为1的位,用diff变量存储起来,表示两个数字的的(一个为0,一个为1,异或以后必定为1)。由此我们可以分组,10,分别对这两组数字与nums进行异或操作,得到两个的数字。再将这两个数字与1~N异或起来,而nums中的数字一定会出现两次,则相同数字异或结果为0,最后就可以得到两个缺失的数字。原创 2025-03-03 19:42:12 · 362 阅读 · 0 评论 -
LeetCode 704.二分查找
在本篇以及之后几篇的博客中,博主将会用二分法进行解答,以此巩固二分题型。二分法一般用于具有的数据中使用。比如该题为有序数组,需要我们查找一个目标值target,分析后发现,这段数据中会出现,大于target,小于target,等于target,而等于target是我们的目标,于是可以判断出,这个数组是具有二段性的,,由此得出使用二分法。我们以下面数组进行举例,首先求出一个中间值,这里我使用,在某些情况下,,具体在之后的篇章中会进行说明。原创 2024-12-18 22:30:47 · 600 阅读 · 0 评论 -
LeetCode 904.水果成篮
求水果的最大数目,也就是求最大长度,我们是单调的向前求解,则能够想到使用进行解答,可以用,且都从起点开始。右边框先走,当种类个数为0时,表示这是个新种类,kinds++,当kinds大于2,则不满足题意,需要,再,当种类个数为0时,旧种类删减完成,继续移动右边框,重复该过程并每次循环都算一下长度,直到right走到尾结束。原创 2024-12-18 22:29:35 · 433 阅读 · 0 评论 -
LeetCode 438.找到字符串中所有字母异位词
需要找到子串异位词,也就是只看该子串是否有相同字母而不管位置是否相同。分析题目发现只需要单调向前找异位词,则可以使用求解,注意这里每当,并且异位词可以用哈希表进行判断:定义两个哈希表,一个s的哈希表,一个p的哈希表。通过分析题目,异位词不严格要求一一对应,则,我们可以再定义一个count,当插入时,,count++;删除时,,count–。最后,当count == len时,表示该子串中找到了异位词,将left插入到vector中即可。原创 2024-12-03 11:35:38 · 386 阅读 · 0 评论 -
LeetCode 1658.将x减到0的最小操作数
分析该题,要求在数组左右两边依次找到几个值,这几个值的和减去x为0,且要个数要最少。我们可以用的方法进行解答,先将,得到的值就是我们需要求的。定义左右两个指针在起始位置,,直到ret原创 2024-11-21 14:44:29 · 307 阅读 · 0 评论 -
LeetCode 1004.最大连续1的个数III
如示例1所示,我们可以翻转0来得到一个最大长度,那么我们可以用来解决,遇到1时不做判断,,直到计数器小于K时,再次移动右指针,并且每次都计算长度,当这样遍历完整个数组后,就可以得到一个最大值。原创 2024-11-18 17:33:05 · 236 阅读 · 0 评论 -
LeetCode 209.长度最小的子数组
该题可以用进行解答,滑动窗口的意思是,我们判断一段区间的情况,再根据不同情况进行区间的更新。这里要求满足总和大于等于target的子数组,那么我们可以用两个指针当做左区间和右区间,再用个sum变量统计该区间的和。,然后继续判断。原创 2024-11-14 09:14:35 · 340 阅读 · 0 评论 -
LeetCode 3.无重复字符的最长子串
使用,哈希表映射每一个字符串,左右指针表示当前区间,当出现一个字符串那么就将哈希表+1,右指针移动,当哈希表对应位置大于1时,表示重复出现了,左指针移动,然后哈希表对应位置-1,最后再计算距离。原创 2024-11-11 21:51:08 · 451 阅读 · 0 评论 -
LeetCode 18.四数之和
由题意得,四个数组里面的整数相加需要得到target这个目标值,且,那么我们可以用的方式进行解答,将该数组变为,然后,从第二个固定的数下一位开始创建一个left指针,数组结尾创建一个right指针。创建好指针后,我们将target减去固定的两个数得到变量ret,这样只需要考虑两个指针相加是否等于ret。此时两个指针相加有。原创 2024-10-24 23:22:52 · 531 阅读 · 2 评论 -
LeetCode 611.有效三角形的个数
有效三角形的判断方法为两边之和大于第三边,所以我们可以先对该数组进行,再对其进行判断。假如我们以,那么先将4固定住,左指针在第一个数,,那么我们首先判断左右指针相加情况,此时大于4,而该数组有序排列,所以可以得出,可以用right-left统计该区间所有有效组合,最后right–继续判断。当right走到2时,left+right<4,,则该区间没有有效组合,可以直接left++,不再关注right往左的情况。原创 2024-10-23 10:35:27 · 623 阅读 · 0 评论 -
LeetCode 11.盛最多水的容器
可以用的方式,左右两边分别定义一个变量,都往中间走,相遇停止,中间不断更新最大容积,而选出来的最大值就是最大容积。这里容积的计算方式为,左右两个边选出。我们用对撞指针判断,原理是当指针向中间走时,底边一定是越来越短的,而更短的那个边容积一定更小,所以需要淘汰,每次都更新最大容积,直到左右指针相遇,所选出来的容积就是最大值。原创 2024-10-18 16:16:15 · 413 阅读 · 0 评论 -
LeetCode 202.快乐数
用来进行解答,可以将其看做一个,当快慢指针相遇时,判断快慢指针是否为1(为1以后无论怎么取平方和都会为1),如果为1就是快乐数,否则不是。原创 2024-10-17 19:38:06 · 410 阅读 · 0 评论 -
LeetCode 692.前K个高频单词
首先用map存储该字典,然后放进vector进行排序,注意sort的排序规则与我们想要的规则不一致,所以我们需要写一个伪函数来判断second(value值),由于该题要求了稳定性,所以我们在伪函数还需要继续判断相等情况的顺序。排完序后用vector将前k个单词存储起来返回。原创 2024-09-13 16:27:12 · 487 阅读 · 0 评论 -
牛客JZ36 二叉搜索树与双向链表 C++
由图所示,我们看出该链表走的是中序,所以我们可以使用的方式来解决这个问题,在遍历过程中,我们创建一个,来进行链接。并且,我们需要判断前驱结点的情况,不然当走到空时,再链接就会发生错误,当,否则直接回到后继结点,不进行操作。原创 2024-09-08 22:29:39 · 409 阅读 · 0 评论 -
LeetCode 236.二叉树的最近公共祖先
那么我们可以根据情况判断,需要用到,root为当前所开始的结点,p、q为需要寻找的结点。当p、q有一个等于root时,可以直接返回root。当p、q分布在两边时,我们可以用一个函数判断,去。,我们需要将,最后出现时,返回root结点,该结点为最近公共祖先。如果,那么需要去。不过这种方式时间复杂度会很高,因为有树全偏向一边的情况。原创 2024-09-06 18:32:17 · 595 阅读 · 1 评论 -
LeetCode 105.从前序与中序遍历序列构造二叉树
由题,,那么我们可以进行第一次判断——根为3,左子树为9,右子树为15,20,7。可以利用递归,进行每个结点的判定,比如右子树为15,20,7,而前序顺序为20,15,7,所以可以判断右子树根为20,再一次用中序得出左子树为15,右子树为7,以此类推…我们可以用rooti(中序数组下标)来,由此反复递归直到整棵树遍历完,就能够构造一颗二叉树了。原创 2024-09-04 22:28:03 · 450 阅读 · 0 评论 -
LeetCode 606.根据二叉树创建字符串
根据示例发现,当,因为分不清到底是左为空还是右为空,所以我们在解题时需要判断结点的左右情况。题目要求(根左右),我们可以用传并赋给str,。然后开始走左边,这里要判断一下,如果那么我们就需要,当走到空或者函数走完时就回到上一次递归,开始遍历右边,右边只需要判断是否为空,不为空就进行递归。当遍历完该树后,str就是前序字符串。原创 2024-09-04 22:10:15 · 474 阅读 · 0 评论 -
LeetCode LCR088.使用最小花费爬楼梯
动态规划原创 2024-09-03 18:29:17 · 1229 阅读 · 0 评论 -
牛客 BC153数字统计 C++
用枚举+数字拆分的方式,模10取到该位数字,除10去除该位数字,再取模拿到下一位数字。for循环对L到R的每个数字进行拆分,如果拆出来的数字为2就++一次ret。原创 2024-08-29 14:54:40 · 261 阅读 · 0 评论 -
牛客 点击消除 C++
可以用的思路,但我们这里用,创建一个str为输出字符串,s接收字符串,然后开始对比,如果str的尾部(可以说是栈顶)与遍历到的接收字符串相等,那么就删除(出栈),否则插入(入栈),当s遍历完成,str就是最终消除的结果。原创 2024-08-29 14:37:14 · 406 阅读 · 0 评论 -
牛客NC313 两个数组的交集 C++
用哈希表存储第一个数组,再和第二个数组对比,对比成功就添加到新的数组中,再将哈希表的该位置变为false,防止重复添加。这里数据范围仅有1000,所以我们可以自己创建一个bool数组来当哈希表,节省new的时间。原创 2024-08-28 16:32:14 · 216 阅读 · 0 评论 -
LeetCode 19.删除链表的倒数第N个结点 C写法
我们先创建一个哨兵位,这样便于我们头删,然后利用,一个指针(带哨兵位要多走一步),然后,当先走的指针结束,那么后走的指针下一个就是我们要删除的结点,最后用新的头结点接收即可。原创 2024-08-10 23:03:28 · 476 阅读 · 0 评论 -
LeetCode 150.逆波兰表达式求值
用,如果,当整个字符串遍历完后,栈顶值就是该表达式的值。原创 2024-08-09 14:31:30 · 373 阅读 · 0 评论 -
LeetCode 102.二叉树的层序遍历 C++
用,要获取每层结点个数,可以创建一个变量levelsize,读取队列所存储的结点个数。原创 2024-08-06 22:51:15 · 302 阅读 · 0 评论 -
牛客 JZ31.栈的压入,弹出序列 C++写法
创建一个栈,push压入序列,然后用,如果,直到压入序列走完,如果栈为空了就说明匹配成功,否则失败。原创 2024-08-06 22:50:27 · 306 阅读 · 0 评论 -
LeetCode LCR147.最小栈
建立两个栈,一个栈正常入栈出栈,一个栈,当push值小于minst栈顶才入栈,当pop值等于minst栈顶才出栈。原创 2024-08-05 09:56:55 · 281 阅读 · 0 评论 -
LeetCode 572.另一棵树的子树 C写法
可以用上的方法,,如果有一轮比较成功就表示root包含subroot。原创 2024-08-02 20:41:30 · 342 阅读 · 0 评论 -
LeetCode 965.单值二叉树 C写法
用的方式,如果,如果走完一颗子树,结点为空了就返回true到上一层递归,直到左右子树全部走完,。原创 2024-08-01 12:57:40 · 400 阅读 · 0 评论 -
牛客 KY11.二叉树遍历
我们接收字符串以后,创建一个,然后就可以开始建立树,如果是新的结点去存储,是**'#'就返回空**,最后用以的顺序创建结点。树建立完成后,再用中序遍历一次即可。原创 2024-08-01 12:56:34 · 265 阅读 · 0 评论 -
LeetCode 144.二叉树的前序遍历 C写法
遍历很简单,但是我们需要开空间进行值的存储,,开好空间就可以用数组进行值的存储,,否则当一边子树递归完开始递归另一边子树时,。原创 2024-07-31 09:02:16 · 460 阅读 · 0 评论 -
LeetCode 101.对称二叉树 C写法
将该树一分为二,左子树的左边与右子树的右边比,左子树的右边与右子树的左边比,不相等或者一边为空则不是对称。原创 2024-07-31 09:01:46 · 271 阅读 · 0 评论 -
LeetCode 17.电话号码的字母组合 C++写法
深度优先搜索+递归原创 2024-07-30 13:30:58 · 344 阅读 · 0 评论 -
LeetCode 100.相同的树 C写法
考察的,前序遍历看或者,不相等就返回false,相等就递归下去,直到两边结点都走完。前序遍历可以先判断根结点是否相等,效率要更高一点。原创 2024-07-27 20:25:03 · 274 阅读 · 0 评论 -
LeetCode 118.杨辉三角 C++写法
我们使用vector来进行解答,该题规律简单,观察一下就可以发现,。难一点的是数据存储方式,C语言需要用到,C++需要用到。如图所示,vector返回的是,vector返回的才是,我们要访问具体数据时,也需要用到访问二维数组的方法,如:a[i][j],。与C语言不同的是,C语言是对,vector是对。原创 2024-07-27 19:43:02 · 359 阅读 · 0 评论 -
LeetCode 622.设计循环队列 C写法
首先我们要清楚循环队列的逻辑结构,队尾应该在队头的,否则就会。其次这题要求返回队尾元素,而用链表不好找尾,所以用比较合适。创建三个变量,一个存储头的下标(front),一个存储尾的下标(rear),一个存储队列长度(k)。,如果。当rear或者front,那么可以进行置0,又从头开始走,具体思路可以看代码。原创 2024-07-23 01:05:51 · 385 阅读 · 0 评论 -
LeetCode 415.字符串相加 C++写法
首先不能用stoi和tostring来做,如果给一个很大的数那一定存不下。我们可以,创建一个变量用于计算下一位数,之后,每一位,完成所有尾插后用就是我们要得到的结果。原创 2024-07-23 01:04:33 · 403 阅读 · 0 评论 -
LeetCode 58.最后一个单词的长度 C++
如果最后字符为空格下标就往后移动,直到不为空格才停止,然后用。原创 2024-07-22 17:08:55 · 491 阅读 · 0 评论 -
LeetCode 125.验证回文串 C++写法
我们,这样效率太低了,所以可以,下标begin和end遇到的就,当两边字母就进行,一样就继续往后走,不一样就返回false。原创 2024-07-22 17:09:43 · 607 阅读 · 0 评论 -
LeetCode 917.仅仅反转字母 C++写法
运用找是字母的下标,,两边都找到就交换位置然后继续走。原创 2024-07-21 10:15:56 · 360 阅读 · 0 评论