
leetcode/牛客
文章平均质量分 62
刷题记录
不如小布.
知行合一.
展开
-
牛客TOP101:寻找峰值
我们先取到数组中间的值,让它与它的前一个或者后一个进行比较(下面的代码实现是与后一个进行比较),如果大于的话,说明它。,之间排除一半数据,如果小于的话,说明后一个值大于它,那么。,然后不断循环,最终的值就是我们需要的结果。这个很重要,要记住。原创 2024-07-26 21:35:39 · 560 阅读 · 2 评论 -
牛客TOP101:二分查找-I
使用双指针算法,因为它是有序的,我们直接判断数组最中间的值,进行比较,如果大于目标值,说明结果在数组的左半区间,那么我们之间将左半区间当成一个完整的数组,这样我们一次就可以排除一半的数据。原创 2024-07-26 21:30:39 · 506 阅读 · 0 评论 -
牛客TOP101:删除有序链表中重复的元素-II
一开始按照我的思路,就是同样使用三个指针进行标记,如果cur和next的值一样,那么就使用一个变量去保存这个出现的重复值,然后从cur一直将等于该值的结点删除,如果cur和next不等于,那么三个指针就集体向后移动。然后看了题解,重新开辟一个虚拟头节点,使用两个指针进行标记,只要cur和next不想等,那么就将cur连接到虚拟头节点上。思路很简单,但是当我实际写的时候,发现要处理的边界情况蛮复杂的,因为这个就相当于原地删除,情况很复杂,有兴趣的可以试试。两个代码我都会贴上。原创 2024-07-25 22:08:04 · 521 阅读 · 1 评论 -
牛客TOP101:删除有序链表中重复的元素-I
原因:首先删除一个结点,本质上就是将删除结点的前一个结点的next,指向被删除节点的下一个,所有需要三个指针来标记。使用三个指针prev,cur,next分别标记连着的三个结点,如果prev和cur的值相等,那么就删除cur。原创 2024-07-25 22:01:31 · 355 阅读 · 0 评论 -
牛客TOP101:链表的奇偶重排
使用一个指针指向头部,然后再一次走两步,就可以遍历到奇数结点了,将其一一拷贝构造到一个新链表上即可。然后再指向头节点的下一个结点(可能为空,需要判断),重复上面的操作即可。原创 2024-07-24 19:50:20 · 356 阅读 · 2 评论 -
牛客TOP101:判断一个链表是否为回文结构
我们知道,回文的结构就是从前和从后遍历的结果是一样的,那么我们就可以先将链表保存一份,然后进行逆置,与原链表进行比较,判断是否相同就可以了。原创 2024-07-24 19:46:56 · 478 阅读 · 0 评论 -
牛客TOP101:单链表的排序
left和mid一次走一步,right一次走两步,这样当right到最后一个结点时,mid就在中间,然后再让left->next指向nullptr,断开两个链表。按我们以往的排序算法来看,针对链表来说都是太不合适,因为很多都会出现指针前移后移,后移还好说,前移对于链表来说就太难了,而且大部分都是某一个位置和另一个离它很远的位置进行比较交换位置,这在链表中是不切实际的。其原理就是先通过递归将一个链表分成一个一个单个的结点,然后两两进行比较、排序、连接,这是第一次排序,再往后就是。,其实针对于单个链表的排序,原创 2024-07-20 21:59:34 · 736 阅读 · 5 评论 -
牛客:TOP101链表相加(二)
运算也很简单,取出链表中的数据,进行相加,将结果重新构建一个结点(为了方便连接,我们可以先开辟一个头节点),然后连接到我们的头节点上,然后两个链表都往后移,进行下一位运算,一直到结束。这里要注意两个链表长度不一样,可能会遇到一个链表先走完的情况噢。按照我们习惯的加法运算,肯定是要从个位开始相加,然后十位……,但是在链表中如果我们先运算后面的,那么接下来我们是无法找到前一位的。想要解决这个问题也很简单:。逆置完成之后我们就可以从头开始相加了。那么接下了就是两个链表一位一位进行相加了,要注意进位问题噢。原创 2024-07-20 21:42:09 · 589 阅读 · 0 评论 -
牛客TOP101:两个链表的第一个公共结点
如果两个链表相交的话,它们相交之后的长度是一样的,我们不用考虑。问题就在于我们不知道两个链表的前面的长度,不知道它们何时会相遇,那么我们可以先求出两个链表从头到尾的长度,求它们的差,让长度长的先走它们的长度之差步,这样它们剩余的路径长度就一样了。原创 2024-07-19 22:48:44 · 571 阅读 · 3 评论 -
牛客TOP101:链表中倒数最后k个结点
求的是倒数第k个结点,我们可以先让一个快指针走k步,慢指针指定头节点,这样快慢指针之差就是倒数第k个结点到空节点的距离,因此只要快指针走到空,那么慢指针指向的就是倒数第k个结点。原创 2024-07-19 22:30:20 · 382 阅读 · 0 评论 -
牛客TOP101:链表中环的入口结点
【代码】牛客TOP101:链表中环的入口结点。原创 2024-07-18 21:41:57 · 790 阅读 · 4 评论 -
牛客TOP101:判断链表中是否有环
快慢指针,原理就是快指针一次走两步,慢指针一次走一步,快指针会先进入到环中进行循环,慢指针后进行。以相对来看,快指针是比慢指针多走一步,只要进入到环中,那么快指针迟早会追上慢指针。如果没有环,就会走到nullptr。原创 2024-07-18 21:32:40 · 364 阅读 · 0 评论 -
牛客TOP101:合并两个排序的链表
与正常的合并两个有序数组思路一样,这里可以定义一个头节点(虚拟节点),可以方便我们一开始进行连接。用两个指针标记两个链表的结点,进行循环比较,谁小谁连接到我们开辟的头节点上。最后判断谁没连接完,直接连接上就可以了。原创 2024-07-16 22:16:25 · 320 阅读 · 1 评论 -
牛客TOP101:链表内指定区间反转
如果翻转的区间包含了头节点,那么翻转之后的函数返回值就不再时原来的头节点了,而是我们翻转之后的结点(做过翻转链表这个题就知道为什么了),如果翻转区间不包含头节点,那么最终的返回值依旧是原来的头节点。(因此这里是需要进行判断的)我们可以将翻转区间之外的部分先忽略掉,这样问题就转化为了翻转整个链表。在翻转完成后,在将剩余的部分连接起来就可以了。这道题和反转链表的区别在于:它仅仅只翻转其中的某一个区间,但是我们可以将问题进行转化,转化为翻转链表。我在代码实现部分详细说明的每一步的代码意义,相信会对大家有所帮助。原创 2024-07-15 23:18:52 · 827 阅读 · 6 评论 -
牛客TOP101:反转链表
具体做法就是,使用cur标记当前结点,代表这我们将要翻转这个结点的指向,prev指向它的前面的一个结点,next保存它后面的一个结点,然后循环修改cur的指向结点就可以了。简单粗暴的写法,就是从头到尾挨个将所有结点的指向翻转即可。需要注意的是,翻转之后会失去原有指向的结点,所以需要提前保存。原创 2024-07-15 21:27:12 · 420 阅读 · 1 评论 -
牛客:DP25 删除相邻数字的最大分数(动态规划)
如果选择了,那么 f [i] = nums [ i ],但是我们得到的只是这一个数,应该在加上前面的结果,这个数被选了,那么前面的数就是被删除的,也就是不选的,那么 f [i] = nums [ i ] + g [ i - 1]。的分数,因此为了能快速统计出选择某一个数所能得到的分数,我们可以在输入数据时,使用一个数据来计算出选择一个数所能得到的分数(哈希)。对于某一个数,如果我们选择它,那么就会得到它对应的分数,我们使用 f [ ] 数组进行保存,使用 g [ ] 数组保存不选择这个数所能得到分数。原创 2024-07-14 18:09:06 · 407 阅读 · 2 评论 -
牛客:组队竞赛(贪心)
很简单——贪心,因为要保证第三个数比第二书还要大,所以我们将数据进行排序后(升序),选取倒数第二个数作为我们第一组数据的第二的数,从最前面选一个小数作为第一个数,这样一组数据就完成分组了。然后将倒数第三个数作为第二组数据的第三个数,倒数第四个数据作为第二组数据的第二个数,以此类推……题目的意思就是三个数为一组,并且是有序的,如果才能将所有组的第二个数之和最大,也就是尽可能的将每一组的第二个数弄成最大值。原创 2024-07-14 17:44:57 · 414 阅读 · 0 评论 -
牛客:乒乓球筐(哈希)
使用两个哈希表将A和B盒中的字符全部同统计出来,进行比较大小就可以了。原创 2024-07-14 17:35:57 · 266 阅读 · 0 评论 -
强化训练:day5(游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)
游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)。原创 2024-04-27 17:23:19 · 568 阅读 · 1 评论 -
强化训练:day13(牛牛冲钻五、最长无重复子数组、重排字符串)
1. 牛牛冲钻五2. 最长无重复子数组3. 重排字符串前两个题都是由固定的算法思路,进行专项训练就可以了,至于第三个题那么就只能看个人的想法了。不过多做题肯定是没错的,希望大家可以继续练习下去。那么第十三天的内容就到此结束了,如果大家发现有什么错误的地方,可以私信或者评论区指出喔。我会继续坚持训练的,希望能与大家共同进步!!!那么本期就到此结束,让我们下期再见!!原创 2024-07-06 19:18:34 · 522 阅读 · 0 评论 -
强化训练:day6(大数加法、链表相加、大数乘法)
今天的问题主要是处理 "大数加法"问题。大数加法链表相加大数乘法。对于大数加法这部分的知识来说,我觉得还是比较重要的,因为在现实中总会出现很大的数字,仅靠long long是无法存储的,那么就需要使用这种方式来处理数据。原创 2024-04-30 16:30:42 · 589 阅读 · 2 评论 -
强化训练:day10(最长回文子串、买卖股票的最好时机(一)、过河卒)
做题链接:1. 最长回文子串2. 买卖股票的最好时机(一)3. 过河卒dp原创 2024-05-21 16:53:10 · 373 阅读 · 2 评论 -
强化训练:day7(字符串中找出连续最长的数字串、岛屿数量、拼三角)
1. 字符串中找出连续最长的数字串2. 岛屿数量3. 拼三角对于第一题,当时使用一模一样的代码,不知道为什么当时写的时候测试用例总是只能过百分之80,今天测试的时候就成百分之百了……挺无语的。不过今天的重点还是第二题,dfs,大家可以通过画图来理解整个解题思路噢。那么第天七的内容就到此结束了,如果大家发现有什么错误的地方,可以私信或者评论区指出喔。我会继续坚持训练的,希望能与大家共同进步!!!那么本期就到此结束,让我们下期再见!!原创 2024-05-13 21:01:42 · 462 阅读 · 0 评论 -
强化训练:day12(删除公共字符、两个链表的第一个公共结点、mari和shiny)
1. 删除公共字符2. 两个链表的第一个公共结点3. mari和shiny原创 2024-06-05 17:16:20 · 508 阅读 · 2 评论 -
强化训练:day9(添加逗号、跳台阶、扑克牌顺子)
1. 添加逗号2. 跳台阶3. 扑克牌顺子原创 2024-05-14 20:11:02 · 860 阅读 · 4 评论 -
强化训练:day8(求最小公倍数、数组中的最⻓连续⼦序列、字⺟收集)
1. 最小公倍数2. 数组中的最⻓连续⼦序列3. 字⺟收集原创 2024-05-14 20:10:14 · 814 阅读 · 4 评论 -
强化训练:day3(Fibonacci数列、单词搜索、杨辉三角)
WY22 Fibonacci数列NC242 单词搜索BC140 杨辉三角。原创 2024-04-23 09:21:11 · 625 阅读 · 0 评论 -
leetcode.反转链表
反转链表图形与文字详解原创 2023-03-05 20:56:07 · 142 阅读 · 4 评论 -
强化训练:day2(牛牛的快递、最小花费爬楼梯、数据中两个字符串的最小距离)
今天的内容比昨天的稍难一些,今天涉及到了dp问题,本来之前是打算先写一些算法总结的,但是时间不太充裕,就没写,以后我再补上。补不补都是后话了,我们先来看今天的内容。原创 2024-04-22 10:48:29 · 915 阅读 · 0 评论 -
强化训练:day1(数字统计、两个数组的交集、点击消除)
为了提升自己的编码能力,我决定展开持续N天的训练计划,计划是每天写最少三道编程题,来训练自己,同时为了加强理解,决定以博客的形式,将自己的做题过程记录下来,即为进一步加强做题思路,也为了后续方便复习。(我是C++选手,因此我的题解都是C/C++写的,对于其他的语言,看看解题思路就好了)一开始需要从易到难了,不然真就是从入门到入土了……,第一天的还是比较简单,主要是第三题第一次写的时候超时了,还是后续看了别人的题解才想到这个方法,因此我的目标是:难题会做就行,简单题要用更少的时空复杂度来完成。原创 2024-04-18 16:01:36 · 885 阅读 · 0 评论 -
强化训练:day11(游游的水果大礼包、 买卖股票的最好时机(二)、倒置字符串)
1. 游游的水果大礼包2. 买卖股票的最好时机(二)3. 倒置字符串原创 2024-05-28 15:52:40 · 861 阅读 · 3 评论 -
强化训练:day4(BC149 简写单词、dd爱框框、除2!)
BC149 简写单词dd爱框框除2!,分别涉及模拟、滑动窗口、堆(优先级队列)的内容。模拟题没什么好说的,对于滑动窗口,本质就是用双指针来维护一个符合条件的区间,然后不断进窗口和出窗口,一直找到所有符合条件的结果,一般就是用于一段子区间求和,上面的例题就是典型的滑动窗口问题,多画图多看多走读代码就能理解了。而最后一个题就是堆的简单使用,不理解的话可以看看有关堆的相关知识,在这我就贴一个链接,有兴趣的可以看看堆的知识。二叉树与堆。原创 2024-04-24 20:48:28 · 568 阅读 · 0 评论