![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
个人 leetcode学习 Golang
文章平均质量分 50
根据代码随想录的刷题路线进行刷题,这个专栏用来记录使用golang编写过程中的收获
鳄梨阿龙
这个作者很懒,什么都没留下…
展开
-
Golang 三数之和+ 四数之和 leetcode15、18 双指针法
知识补充:map的key值必须是可以比较运算的类型,不可以是函数、map、slice。原创 2024-01-14 14:24:15 · 505 阅读 · 0 评论 -
Golang leetcode28 找出字符串中第一个匹配项的下标 KMP算法详解
因此我们可以对模式字符串建立一个数组,分别记录当第几个开始不对应时,下次从第几个再开始比较,也就是常说的。前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。第4个字母不一致,但前三个字母是一致的,那么当我们继续寻找时,没有必要再从第一个字母开始对应。那么,从这里我们又能够发现,下次从第几个数字开始进行比较,只跟这次重复的子串有关系,,也就是以字符串第一个字符作为开头,同时不包括最后一个字符的所有子串,续接我们提到的前后缀的概念,前三个字符为aba,则前缀为。原创 2024-01-21 17:12:18 · 1065 阅读 · 0 评论 -
Golang 四数相加 leetcode454 map哈希表
本题如果直接进行四次for循环,则时间复杂度为O(N^4),超出运行时间限制。因此我们这里使用两个分别的for循环进行遍历,则时间复杂度为O(N。原创 2024-01-10 16:38:57 · 598 阅读 · 1 评论 -
Golang leetcode242有效字符异位词 哈希表map 排序
由于题目规定只有26个小写的英文字符,因此我们直接建立26容量的map。原创 2024-01-07 16:56:02 · 514 阅读 · 0 评论 -
Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶
【代码】Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶。原创 2024-01-17 21:24:32 · 486 阅读 · 1 评论 -
Golang 卡码网55 右旋字符串 切片拷贝问题补充
通过[:]的方式进行赋值的方式,如b:=a[:2],由于其共享底层的数组,所以说修改其中之一,另一个也是受影响的,为。切片如果想要实现深拷贝,需要使用**原创 2024-01-20 13:42:46 · 664 阅读 · 0 评论 -
Golang 快乐数 leetcode202 map哈希表 快慢指针法
对于本体中快乐数的检测,如果非快乐数,应该会在循环中有的数出现。当为3位数时,即使为999,每位的平方和仅为243,所以能循环的数肯定是有限的。我们使用map进行数据的记录,当检测到重复时,说明不是快乐数。原创 2024-01-09 22:57:32 · 558 阅读 · 0 评论 -
Golang 替换数字卡码54题
单引号’',表示byte类型或rune类型,对应int8和int32类型,默认是rune类型。go中string时无法直接修改的,但我们这里采取[]byte进行读取的话则可以针对进行修改。这里我们不在输入获得的[]byte类型上直接修改,而是保存在新建的[]byte上。但在实际使用的过程中,第二部分所需的运行存储反而更多。,起为acm模式的答题。原创 2024-01-15 20:48:50 · 521 阅读 · 0 评论 -
golang leetcode349两个数组的交集 map 双指针+排序
对数组进行排序后,就可以通过双指针的方式从小到大开始比较两个数组。以下两种方法都是采取的这个思路,只是循环的方式不同,复杂度相同。由于golang中没有set,这里算是模拟的一种方式。当然这里也可以用数组来代替map。原创 2024-01-07 19:03:48 · 396 阅读 · 0 评论 -
Golang leetcode24两两交换链表中的节点 递归 迭代
第一次即成功,泪目!!原创 2024-01-03 10:40:14 · 514 阅读 · 0 评论 -
Golang Leetcode19 删除链表的倒数第N个节点 递归 双指针法+迭代
由于本体是倒数第几个节点,非常适合递归 从终到始 的运行方式。原创 2024-01-03 17:31:00 · 487 阅读 · 0 评论 -
Golang leetcode142 环形链表 暴力map 快慢指针法
的情况:刚进入节点时,慢指针此时在相交节点上,快指针在慢指针前面一个。由于快指针的移动速度为2,慢指针的移动速度为1, 二者相对速度为1。什么如果成环,快指针一定会再慢指针没有转完一圈之前追上满指针?我们可以通过map进行记录,没到新的节点查询是否经过原有节点。若有入环节点,则一定能检测到;若没有,则总会到达最后节点。得到二者一定相遇时,我们如何确定到底哪个节点是入环节点?所以当快指针跟在慢指针后面时有以下几种情况。假设环的长度为n,慢指针走完环的步数为n。入环节点,上两个节点的next相同。原创 2024-01-06 13:44:02 · 2186 阅读 · 0 评论 -
Golang leetcode160相交链表 map 双指针迭代
则由于两个链表没有公共节点,两个指针也不会同时到达两个链表的尾节点,因此两个指针都会遍历完两个链表,在指针。次之后,两个指针会同时到达两个链表相交的节点,该节点也是两个指针第一次同时指向的节点,此时返回相交的节点。前面陷入思维误区,相交节点之后两个链表是完全一致的,所以我们可以忽略长链表比短链表长的一部分,如果 a=b,则两个指针会同时到达两个链表相交的节点,此时返回相交的节点;,则两个指针会同时到达两个链表的尾节点,然后同时变成空值。,两个指针不会同时到达链表的尾节点,然后指针。原创 2024-01-04 22:44:35 · 1054 阅读 · 0 评论 -
Golang leetcode707 设计链表 (链表大成)
由于在go语言中都为值传递,(注意这里与值类型、引用类型的而区别),所以即使我们直接在方法中传入指针,但是我们在方法里是不能直接修改指针所改的地址,其在方法中只会复制一份副本进行操作,而不会影响到原变量。所以我们这里可以设置一个结构体,在mylinkedlist中在定义链表节点进行解决。这里放一个经典的愚蠢案例以作警戒,妄想通过副本直接影响原链表。题目要求我们通过实现几个方法来完成对链表的各个操作。原创 2024-01-01 11:05:03 · 588 阅读 · 0 评论 -
Golang leetcode206 翻转链表 迭代 递归 双指针
下面的几行代码,我明显是head,下一个就是head->next,由于要反转链表,我的下一个要变成我的上一个,因此head->next->next = head,我的上一个(递归)等到这层递归出去再解决。可以看到newHead在递归结束返回后是没有进行任何操作的,也就是返回的是最底层的那个,起到传递尾(新首)结点的作用。其实在初始时也曾考虑过,最后没有直面的勇气,抽自己两个大嘴巴子,必须醒悟,fuckmyself。链表的操作需要记住三个东西,上一个是谁,我是谁,下一个是谁。原创 2024-01-01 18:12:57 · 858 阅读 · 0 评论 -
golang leetcode203移除链表元素
如果当前节点的值不等于 val,那么我们需要保留这个节点,并将其 next 指针指向递归调用的结果。但在递归中,我们没有直接的方式来访问父节点,因此我们通过返回下一个节点(head.next)来实现这一点。:递归的最终结果是新的链表头节点,它可能与原始链表的头节点不同,尤其是当原始头节点的值等于 val 时。:对于每个节点,调用递归函数处理它的下一个节点(即,调用自身传递 head.next 和 val)。如果是,我们需要删除这个节点,这意味着需要将其父节点(递归中的上一个节点)连接到它的下一个节点。原创 2023-12-28 18:36:11 · 775 阅读 · 1 评论 -
Golang leetcode59 螺旋矩阵
【代码】Golang leetcode59 螺旋矩阵。原创 2023-12-23 14:00:16 · 795 阅读 · 0 评论 -
Golang leetcode209 长度最小的子数组
利用如下图所示的思想,但是使用的空间太大了。原创 2023-12-21 16:21:00 · 525 阅读 · 0 评论 -
Golang 数组 移除元素 双指针法 leetcode27 小记
而go中切片的截取(s[:]和append方法),都是通过修改指向底层的数组的指针实现,对于删除头部和尾部元素的时间复杂度为。由于切片为引用类型,其本质是基于数组完成的,因此我们操作切片可以理解为操作底层的数组。在c中erase函数删除元素是将数组中当前位置后面的元素都向前移动一位,其时间复杂度为。类型:int、float、bool、string、数组、结构体。第一个for循环遍历切片,第二个for循环将部分数组前移。类型:指针、切片、map、管道、接口。,中间元素的删除则同样为。原创 2023-12-17 21:27:36 · 521 阅读 · 0 评论 -
Golang leetcode977 有序数组的平方 双指针法
这里仍旧有瑕疵,比如我们这里在寻找最小正数时,可以将判断n是否等于L加入到判断条件中,而不使用break。后面的填入数字过程中也可以使用多个if else进行判断,不使用continue。已经想到双指针法,但是对于循环的边界条件仍然找不明白,对于特殊情况没有适应性,很容易出错。而且在更改的过程中喜欢钻牛角尖,不更改现有的惯性思维,后续需要更正这些缺点。原创 2023-12-20 16:02:19 · 486 阅读 · 1 评论 -
Golang 二分查找 LEETCODE704 小记
对于二分法的区间定义,可以有闭区间、左闭右开、左开右闭等多种写法,他们的含义是我们寻找的。的元素列表中寻找需要的元素,返回其位置或错误。等带log的复杂度时,可以考虑二分查找法。,逻辑比较简单,但就是写不好。当要求算法的时间复杂度在。二分查找涉及的很多的。与此相关的自然就会产生。原创 2023-12-17 15:02:57 · 431 阅读 · 0 评论