- 博客(23)
- 收藏
- 关注
原创 LeetCode--29.两数相除
(这道题你可能看过很多的题解了,你可能是百思不得其解的状态,所以我还是打算换一种方式来帮助你理解,我会用我初次看到这道题一直到我写出其他方法的过程来帮助你层层递进哦,可以期待一下,好了,下面就开始了,你要跟上咯)(我知道,你肯定看不懂我说的啥意思,即使你看懂了我上面快速乘算法的基本原理,所以,你可以结合我下面的代码好好理解一下,我每行都会给出注释)你想一下,我们是求商对吧,在本题的条件下,一个除法的商是不会大于它的被除数的吧,因为都为整数嘛,那么我们可以知道,商一般不会溢出。
2025-06-12 21:14:06
1286
原创 LeetCode--28.找出字符串中第一个匹配项的下标
要确认一个字符串是否是另一个字符串的子串,我首先想到的是KMP算法,但我又不想用八股文,所以想了另外一种方法,借用了滑动窗口法和动态规划的思想,你可以自己想一下,再看下面的代码解析。我们知道needle的长度在每个例子中是固定的,所以我们可以在haystack中从头开始,每次比较就取needle长度的子串进行比较。(示例查验环节其实还蛮重要的,它可以帮助你更好地理解题目,避免歧义,而且还可以提醒你不要遗漏信息,我是很喜欢这个环节的)示例2:如果确认needle不是hatstack的子串,返回-1。
2025-06-11 14:50:02
434
原创 LeetCode--27.移除元素
思路:准备两个指针,一个放在数组的首位,一个放在数组的末尾,前面的指针查找等于val的数,后面的指针查找不等于val的数,两个指针都找到之后就交换这两个数,再将前面的指针后移一位,后面的指针前移一位,再重复上面的操作。思路:也是准备两个指针,两个指针的起点都在数组的首位,其中快指针向后查找不等于val的值,查找到了之后,覆盖慢指针指向的数,再将慢指针后移一位,快指针继续查找。当后面的指针比前面的指针靠前的时候,就退出循环,以下是完整代码。所以,数组的大小和除数组前几个元素外的其他元素并不重要。
2025-06-10 17:03:00
492
原创 LeetCode--26.删除有序数组中的重复
它检验的标准:(有些题会给出它检验的标准,除了可以方便你理解外,你还可以根据它实现越狱操作,不过不建议耍小聪明)它会根据你返回的不重复元素的数量来遍历你去重后的数组的前几个数是否和正确答案一致,所以,它只管前几个数,后面的数和数组的大小它不会管的。移动前面的那个指针到下一位,再将后面那个指针指向的元素赋值给前面那个指针指向的元素,之后将后面的那个指针移动到下一位。当然是可以的,下面是完整代码,但是还是不推荐,毕竟是小家子气,上不得台面,看看就行了。的数组,进行去重操作,返回数组中不重复元素的数目。
2025-06-09 10:45:03
346
原创 LeetCode--25.k个一组翻转链表
这三种方法的核心思路都是一样的,或者说25题和24题的核心思路都是一样的,各个方法只是手法略有不同而已,手法好了,你可以叫做手法大师,哈哈。哈哈,今天又是偷懒的一天,之前21题,我说了后续会补上第三种方法,现在虽然还没有补上,但也快了,我打算好好学习一下运算符重构,也要点时间的,但我说会补,那就一定会补上的。下面的两种手法,我在努力地实现,你也可以尝试一下,看它们是否可行,到时候来这里对答案哦,算是磨练一下你咯,宝剑锋从磨砺出,梅花香自苦寒来嘛。好了,早睡,还是提一嘴,纸上得来终觉浅,绝知此事要躬行。
2025-06-08 22:08:33
402
原创 LeetCode--24.两两交换链表中的结点
例如,第一次交换组合的时候,你交换了第一个结点(M结点)和第二个结点(N结点),那我们把它们看作是一个整体,从链表中取出来,此时M结点指向的下一结点就是,后续经过两两交换的(已经取出来M结点和N结点)链表的头结点对不对。示例1:(有时候你要借助题目和示例才能更好地理解题目要求,以免出现歧义)验证了我分析题目环节中的想法,其实我一开始想的是我说的那个错误的想法的,看见这个示例才改正了思路。思路:将链表中的每个结点内部的值都储存在一个vector中,在遍历结点的时候,再进行两两赋值即可,以下是完整代码。
2025-06-07 18:55:40
1513
原创 LeetCode--23.合并k个升序链表
解题思路: 1.获取信息: 给出了多个升序链表,要求合并成一个升序链表,返回首元结点 2.分析题目: 外面在21题的时候,讲了怎样合并两个升序链表为一个升序链表,不了解的,建议去看一下21题题解,不要好高骛远 (有时候一个问题比较难,将它拆分成多个小问题取逐一解决是一个不错的方法) 好了,那我们现在知道怎么合并两个有序链表了,类比推理,我们可以将这个问题看作是两
2025-06-06 20:12:29
1705
1
原创 LeetCode--22.括号生成
这让我想到了我高中做数学题时,遇到的那个路径问题,就是有一个起点和一个终点,每次要选三次路径,每次选路径时,会有三条道路,求有多少种路径可以从起点到达终点,这是一个比较简单的数学问题,答案是三的三次方。思路:我们知道第一个括号一定是左括号,那么在右边一定有一个右括号与之对应,那么我们只需要考虑在括号里面的有效括号组合和在括号外面的有效括号组合即可。第一个括号一定是左括号,因为,如果是右括号,那左边就没有可以与之闭合的左括号。第二个括号,它可以是左括号,也可以是右括号,所以要分类讨论。
2025-06-05 12:54:44
648
原创 LeetCode--21.合并两个有序链表
思路还是跟递归法的一样,唯一的不同就是,迭代法是用迭代来写的,可以来试试,检测一下自己是否真的懂了这道题,(有时候我们虽然做出来了一道题,也许有许多巧合因素,你多写一种方法在练手的同事,也可以加深你对这道题目所考知识的理解,更可以加深记忆,不怕写过一千道题的人,就怕一道题写出来一千种方法的人)第二条链表去掉首元结点后,在剩下的元素中的第一个元素是一个新的首元结点对吧。同上,只不过取元素的链表变成了第一条链表而已。2.第一条链表的元素小于等于第二条链表的元素。1.第一条链表的元素大于第二条链表的元素。
2025-06-05 08:50:16
410
原创 LeetCode--20.有效的括号
只需要在字符串扫描完毕后,判断栈是否为空,为空就说明全部匹配,不为空,就说明,左括号多了,就不是一个有效字符串。(3)后面,我发现出现了一次报错,我上面考虑的都是左括号和右括号的数量相同的情况,没有考虑不同的情况,现在来考虑一下。(3)每个右括号都有一个对应的相同类型的左括号,即:每个右括号的左边一定有一个可以与之闭合的左括号存在(这一点在我下面写的代码中可谓是比较重要了)1.我们知道括号的闭合有一个性质,那就是,左括号要找相对于它里面的左括号来说,最外层的右括号进行闭合。
2025-06-04 15:09:03
590
原创 LeetCode--19.删除链表的倒数第N个结点
思路:使用栈来储存各个结点的地址,并且是从头节点开始存起,按照栈的性质,后进先出,就对后面 n 个结点进行出栈操作,再访问栈顶进行元素删减操作,即可。我考虑到如果出栈出得给栈出空了怎么办,所以我打算在头结点前添加一个前置结点dummy。题目比较简单,我就给出一种我认为比较好的办法。1.获取信息:删除链表的倒数第n个结点,返回头结点。纸上得来终觉浅,绝知此事要躬行。
2025-06-03 18:19:50
192
原创 LeetCode--18.四数之和
我们可以借用分治法的思想来想一下,就是拆分问题,我们固定一个数的取值,那么就是求剩下的三个数的和,即三数之和,这样问题就得到了拆分。如果你没有做过15题三数之和就来做这道题,我建议还是从简单的入手,所以这里我就不讲解15题三数之和了,你可以看一下我之前的讲解。(1)要求:从数组找四个位置互不不同的四个数,它们的和为目标值,就存储下来,直到返回所有互不相同的四个数组合的集合。跟第15题的三数之和差不多,这道题是求四数之和。思路:我分析题目环节已经提过了,不再说了。3.示例查验:没什么补充的。
2025-06-03 17:11:12
193
原创 LeetCode--17.电话号码的字母组合
前言:之前一直提到的图解,开始投放使用咯,我会渐渐地画得更通俗易懂,渐渐地用图解取代文字的,毕竟,谁想一直对着那么长的文字逐字逐句地看嘛,是吧,还有哦,我发现我的讲解能力已经开始跟不上了,我必须要好好琢磨一下我的话语了,害怕你不能理解,浪费你的时间,我也是会很难过的,因为我一开始的初衷就是为了帮助你理解这道题,如果适得其反的话,我会感觉辜负了你的,所以,让我们一起进步吧,我会用力的哦。(这个可能光看文字不能更好地理解,且看我示例查验环节,所以,有时候文字你看不明白,你可以结合示例来理解)
2025-06-02 22:29:14
879
原创 LeetCode--16.最接近的三数之和
前言:其实16题与15题大差不差,15题我已经讲的比较清楚了,16题就偷懒不写啦,哈哈,快哉快哉,如果实在需要,可以给我私信,我会把16题详解写上的,留着这个帖子,占个位置。
2025-06-02 21:48:15
98
原创 LeetCode--15.三数之和
如:[ -1, 0, 1]和[ 0, 0, 0]这两个三元组,返回的顺序可以是[ [ -1, 0, 1], [ 0, 0, 0] ]或者[ [ 0, 0, 0], [ -1, 0, 1] ],都可以,不会影响结果。我还是按我一开始的思路给你讲,一直到最后我得出其他方法,层层递进,可以让你不会太突兀,已经很贴心了,另外下面的方法的排序也是很有讲究的,按我想出的先后顺序进行排序。如:-1,0,1这三个数,可以以 [ -1, 0, 1 ]或者 [ 1, 0, -1]等顺序储存在其中,不影响结果。
2025-06-01 19:53:07
301
原创 Leetcode--14.最长公共前缀(改)
字符串数组,把它划分为二,获得的两个字符串数组,再次划分为二,继续进行上述的划分,直到划分出来的字符串数组里面只有两个字符串,再比较两个字符串,求出它们的前缀,再合各个组的前缀进行比较,最后所得前缀就是答案。前引:我打算偶尔也要画个图来讲解我的方法,这样应该可以更好地讲解,但是明天就是端午了,我打算今天这个讲解就偷懒一下,比较敷衍,我感觉我没讲清楚,所以我发誓,端午过后必改,贯彻我的口碑,这次就算了,别跟自己过不去,委屈你了,看我的帖子,晚安。2.不是都相同,那么直接返回之前积累的相同的字符组成的前缀。
2025-05-30 23:28:00
1433
原创 LeetCode--13.罗马数字转整数
前引:其实我做完12题之后接着做这道题,我还是挺蒙的,看了眼难度,有点怀疑我的智商,但理清思路了之后,也不难,这两天有事情,就发布得少,今天是晚上打完英雄联盟躺在床上,惊醒,发现有好久没有发布了,不能再懒惰下去了,所以拖着疲惫的身体,写了一下吧。2.分析问题:其实我获取信息的时候已经精炼过一次了,已经够易懂了,我这次就不再分析一次了,平时我的分析问题环节都是十分精彩的,这次例外,主要是特别简单,没有这个环节,我觉得差了点什么,就没有删掉。如:"IV","I"为1,"V"为5,"IV"为5 - 1 = 4。
2025-05-29 23:12:36
1147
原创 LeetCode--12.整数转罗马数字(这个差不多跟上一个一样,网站出问题了,我含泪又打了一遍,两个可以对照着看,也许就更好理解了也说不定)
优化思路:我们知道,num,最大不会到4000,那么最多只需要取四次(个位,十位,百位,千位)就可以获得它各个位数上的数字,再通过数字从表中取值,连接字符串即可。如:5:" V ",6:" VI ", 7:" VII ",8:" VIII "如:1:" I ",2:" II ",3:" III "," I "这个字符最多出现三次,表示到3。如:1:" I ",2:" II ",3:" III "如:5:" V ",6:" VI ",7:" VII ",8:" VIII "
2025-05-27 17:03:25
501
原创 LeetCode--12.整数转罗马数字
(1)(主要是非4和9的转换)将一个符号放在另一个符号的右边,表示,加,(给出一个鲜明的例子,就不用常规的,1:" I ",2:" II ",3:" III "了,容易有歧义)(2)两种转换情况(注意:它虽然说的4或9开头的值,但是其实4和9相对于40和90的转换情况,大差不差,你不懂的话,可以好好想一下)如1:" I ",这个" I ",它最多可以出现三次,表示到3:" III "如:5:" V ",6:" VI ",7:" VII "如:1:" I ",2:" II ",3:" III "
2025-05-27 16:21:35
863
原创 LeetCode--11.盛最多水的容器
两个指针都在最边上时,怎么取得一个可能比当前值更大的一个值,根据储水量的计算公式,我们知道,当然是移动一个更小的hight值,这样两个下标的距离( j - i)变小的量最小,而后续hight值可能更大。题目无非就是两条线的组合来求出它们的储水量,直接求出所有的组合的储水量,比较大小即可,(但是时间复杂度为O(n*n),容易超时)1.算出两个指针指向的两条线的储水量后,比较两个指针它们所指向hight数组中的元素的大小,小的向里面移动一位,那么为什么呢?如果更大,我们可以求得一个更大的储水量,不亏。
2025-05-26 11:13:39
356
原创 LeetCode--10.正则表达式(修改了一些可能产生歧义的讲解内容)
这个可是一个好问题,我觉得,我知道它有些增加了一个字符得出的dp[ i ][ j ]没有章法,但你好好想一下,那些错误的,在经过了这么多次迭代,会遇到正确的结果吧,因为它把所有的组合都迭代了遍,错误的结果在后续是用不到的,会闲置在那里,因为前[ i ]个和前[ j ]个的取缔,就是下面的,是依靠有章法的那些,没有章法的那些奇思妙想,是不会用到的。注意:我猜你迷茫的点是,为什么要迭代,先逐次对p依次加一个字符来考虑,而s不增加,等到p增加到底了,s才增加一个字符,然后p又从一个字符开始。
2025-05-25 16:03:05
977
原创 LeetCode--9.回文数
4.尝试编写代码(如果有多种解法,我会标识出来的,没有标识出来就是,只有第一次写和优化后的版本,望周知)示例3:(提醒了你一种特殊样式),个位为零的数都不是回文数,因为,最高位不可能为零。(2)回文数的位数分为偶数和奇数,如121,1221。之前我发的那篇,没有注释,比较不友好,会改正的。示例2:提醒了你,回文数是一个非负整数。(1)暴力法(是我第一次尝试写的)(2)反转一半数字(是我后续优化)(1)回文数是非负整数。题目要求:判断回文数。
2025-05-24 16:55:52
203
原创 LeetCode--8.字符串转换数组(改)
s由'a'-'z','A'-'Z',数字0-9,' ','+','-'和'.'组成。(3)前置零不读取,读取到数字字符后,后续遇到非数字字符或到达字符串结尾就结束,若没读到任何数字字符,默认结果为0。示例4:(这里多获得一个漏掉的信息),前置零虽然不读取,但也算一个数字字符,后续遇到非数字字符也要直接结束。(2)遇到'+',结果为正,遇到'-',结果为负,两者都没遇到,默认结果为正。(4)结果超过32位有符号整数的范围的话,根据正负,变为范围内的最小或最大值。我第一次尝试写的代码(比较冗余)
2025-05-24 10:28:07
119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人