
数组链表
数组链表
加油开心
你好呀
展开
-
leetcode:二叉树中的链表
分模块编程,清晰明了。原创 2024-10-06 11:39:11 · 276 阅读 · 0 评论 -
leetcode:会议室
【代码】leetcode:会议室。原创 2024-08-12 14:00:01 · 179 阅读 · 0 评论 -
leetcode:最短单词距离 III
虽然是2个for循环,但第一个for循环找到第一次word1位置。相同情况,我也是只遍历了一遍数组。下一个for循环接着上次继续。原创 2024-08-08 13:39:01 · 148 阅读 · 0 评论 -
leetcode:最短单词距离
答案稍微看了点,按照答案的取最近一次索引的思路,自己写出来了。写了伪代码,真正写代码就是好写了一些。这个题当时想的是一种暴力解法。原创 2024-08-08 13:01:46 · 236 阅读 · 0 评论 -
leetcode:汇总区间
问题来了,如果low指向5,high指向7,你把5加入进去了,再进位,就越界了。low指向3,high指向5,不相等,然后low指向5,high指向7。然后双指针一个从0开始,一个从1开始,没问题。做一道题要提前想好,你这方法到底行不行得通。难道还要每一次都要加一个判断条件?看竖线所对应的数字即可,即i和j位置。你按照以前思维,先排除特定条件。接下来比如1,2,3,5,7。即每次遇到不相等的都进位。以1,2,3,5,7为例。不要关注a,是为了空格。归根结底还是没思考好。原创 2024-08-07 12:38:12 · 190 阅读 · 0 评论 -
leetcode:存在重复元素
也可以用哈希表,元素插入到哈希表中,如果已经存在了,返回true。还可以排序,然后逐一判断即可。原创 2024-08-05 15:33:56 · 178 阅读 · 0 评论 -
leetcode:快乐数
这个哈希表不会很大,因为最大数全是999999999,每一位平方和也不过1000左右。只要在计算过程中出现37或者73数字,那就不可能会有结果了。每计算出一个结果加到哈希表里,下一个结果在哈希表找到一样的。慢走一步,快走两步,二者相遇则false。如果没出现,那我们到底要算多少次呢?哈希表最大也才1000,这是极端情况。大量实践证明,差不多十多次就可以了。原创 2024-08-05 15:19:09 · 137 阅读 · 0 评论 -
leetcode:比较含退格的字符串
比如skip不等于0,说明当前字符需要去掉,skip-1,直到skip为0。比如123#5和123#7,倒数第一个分别是5和7,直接返回false。首先是#和#,那么二者skip都是1,到了6和6,skip都减去1为0。到了1和2,此时skip为0,不相等,return false。变量skip用于记录#次数,比如skip=0,表示还没遇到#等到skip为0后,比较两个字符串对应的字符是否相同。我这里用的是变长数组,最近刚学的一种数据结构。然后到3和3,相等,继续。到了2和2相等,继续。原创 2024-07-29 15:01:18 · 191 阅读 · 0 评论 -
leetcode:验证回文串 Ⅳ
【代码】leetcode:验证回文串 Ⅳ。原创 2024-07-25 14:37:53 · 250 阅读 · 0 评论 -
leetcode:找到数组的中间位置
leetcode有这样一样的题两道。原创 2024-07-10 13:58:45 · 231 阅读 · 0 评论 -
leetcode:寻找数组的中心下标
【代码】leetcode:寻找数组的中心下标。原创 2024-07-10 13:56:19 · 273 阅读 · 1 评论 -
逆序输出链表
先递归到最后一个节点,然后逐次返回。原创 2023-11-21 15:33:24 · 99 阅读 · 0 评论 -
leetcode:反转链表
最后那个return就是始终返回头,以1->2->3->4->5为例。问题是,最后的你的头指向的是链表尾。也就是你没有控制头指针始终指向头。虽然你转了,也确实反转了。原创 2024-03-20 22:15:38 · 376 阅读 · 0 评论 -
leetcode:删除链表的倒数第N个节点
下面findreverseNode函数是获取倒数第k个节点。p1指向开头,走k步,然后再定义一个p2指向开头。本办法的话你可以先一个for循环获取链表长度。相当于是我没有获取链表长度一样可以求出来。那么此时p2所指的就是倒数第k个节点。虚拟节点意思是为了防止空指针。如何获取倒数第K个节点?这时候p1一直走走到结尾。原创 2024-03-23 13:15:32 · 228 阅读 · 0 评论 -
leetcode:相交链表
这个题有很多种解法我选的一种就是A链表,让A链表的末尾节点连到A开头,这样就构成了环形链表然后套用之前写的求环形链表第一个入口点即可/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * }原创 2024-03-26 11:23:39 · 154 阅读 · 0 评论 -
leetcode:合并两个链表
就是记录一些节点的位置。原创 2024-04-02 18:29:36 · 166 阅读 · 0 评论 -
leetcode:删除链表的中间节点
这里使用pre变量记录上一个节点。只不过是没有记录上一个节点。之前有一道是求链表中点的。原创 2024-04-02 21:08:21 · 404 阅读 · 0 评论 -
leetcode:删除有序数组中的重复项
不相等,快指针赋值给慢指针,慢进一步,快进一步。即总能保证慢指针往前都是不重复的。原创 2024-03-13 21:45:11 · 413 阅读 · 0 评论 -
leetcode:最接近的三数之和
我一开始想的套用三数之和的模板。原创 2024-03-12 21:05:18 · 405 阅读 · 0 评论 -
leetcode:合并两个有序数组
思路就是新建一个数组,对两个要排序的数组使用双指针。把没有走完的指针继续取值放到新数组即可。一个有序数组长5,一个长10。这样指针一个走完一个没走完。原创 2024-03-23 17:50:41 · 155 阅读 · 0 评论 -
leetcode:从链表中移除节点
就是把元素入栈,大下,小上,然后依次取出组合成链表即可。和单调栈整体框架其实差不多。这个题建议双端队列做。原创 2024-04-03 14:08:37 · 120 阅读 · 0 评论 -
leetcode:较小的三数和
所以5的索引是4,0的索引是1,所以4-1=3,就有3个3元组之和小于target。左指针在0处固定,右指针在5处,如果target是5。即-1 0 2,-1 0 3,-1 0 5。比如-1 0 2 3 5。那么-1+0+5=4<5。原创 2024-03-12 21:14:18 · 379 阅读 · 0 评论 -
leetcode:旋转链表
接下来slow和fast一起走最终slow指针下一个指向的就是倒数第K个。接下来找倒数节点就不是按照上述了。用一个新节点从开头走长度-余数步。这个题我先把他变为环形链表。然后fast指针走k步。确实别上述要少走一点。原创 2024-03-28 14:08:05 · 211 阅读 · 0 评论 -
leetcode:排序链表
归并排序不就是不断划分,子链表合并,直到一整个链表排好序。这个可以使用归并排序,复杂度降为nlogn。我这里使用的是优先级队列。参考合并两个有序链表。原创 2024-03-24 14:39:55 · 199 阅读 · 0 评论 -
leetcode:删除排序链表中的重复元素
最后一行slow.next = null。你不指向空的话,一整个链表全部返回了。这个代码是删除有序数组的重复元素。参考删除有序数组的重复元素。因为我们最后是返回head。原创 2024-03-24 15:13:31 · 122 阅读 · 0 评论 -
LeetCode:合并两个有序链表
思路是,先定义两个升序链表,然后逐一比较各节点值,思路很简单。原创 2023-11-20 15:52:32 · 82 阅读 · 0 评论 -
leetcode:链表中的下一个更大节点
先获取链表长度,然后逆序链表,因为要从最后一个元素开始往里放。每压入一个元素,如果前面一个比他小那就弹出,重复,问题是链表,便麻烦了,思路不变。直到前面那个比他大即可。这样栈中就是单调递增的。之后就是上一段介绍的。原创 2024-04-03 13:41:04 · 251 阅读 · 0 评论 -
leetcode:交换链表中的节点
比如1,2,3,4,倒数第3个节点和正数第3个节点相邻。思路就是记录前后节点位置交换而已。看起来简单,但要考虑一种情况。做法不同了,单独拿出来考虑。原创 2024-04-02 20:13:19 · 159 阅读 · 0 评论 -
leetcode:删除链表中的节点
在2节点处值换为3,然后在该处指向4即可。也就是把3删除,当3的替身,这样2就没了。这题没有给你head节点。比如1->2->3->4。我想删除2,怎么删除?原创 2024-03-20 12:52:28 · 428 阅读 · 0 评论 -
leetcode:两数之和
【代码】leetcode:两数之和。原创 2024-03-12 20:58:43 · 364 阅读 · 0 评论 -
leetcode:两数相加 II
这个题你要结合反转链表何两数相加I一起做。先对他们两个都反转一下。然后按照两数相加I做。原创 2024-03-21 17:10:01 · 233 阅读 · 0 评论 -
leetcode:小于k的两数之和
不能通过start和end来找,因为要遍历完,最终start一定等于end。所以在else里面加入变量flag,你只要不进入if,一直进入else。这题其实和小于target的三数和一样的。区别在于题目中如果没找到需要返回-1。那么意味着你根本就没匹配到。原创 2024-03-12 23:32:43 · 414 阅读 · 0 评论 -
leetcode:回文链表
右边头直接就是middle的next,不管奇偶,都是。现在中点在第一个3,3的next就是右半部分的头。因为考虑了奇偶长度,我开始反转的是左半部分。这道题用了之前学的求链表中点,反转链表。之前是比如1,2,3,3,2,1偶数个。其实这个你仔细想,还是反转右边方便。先找到链表中点,然后右半部分反转。稍微把求链表中点改了下。思路是一样就是写不对。原创 2024-03-26 20:07:53 · 174 阅读 · 0 评论 -
leetcode:给单链表加一
这不过另一个变为了只有一个节点且值是1的链表。原创 2024-04-02 16:19:30 · 164 阅读 · 0 评论 -
leetcode:移除元素
不理解了,你可以以0,0,1,target=0为例。fast前面探路,slow要保证当前之前都是好的。fast=target了,fast前进即可。=target了,赋值,slow前进。和删除有序数组中的重复项是一样的。原创 2024-03-14 19:13:59 · 341 阅读 · 0 评论 -
leetcode:删除有序数组中的重复项II
和I一样的,就是在I的代码上增加一个变量,这个变量用于计数是否到了2。慢指针之前包括当前永远是排好的值。通过计数变量来确定是否等于2。之后这个计数变量还要初始化。这两道题我感觉精髓在于。原创 2024-03-14 09:37:19 · 329 阅读 · 0 评论 -
leetcode:分隔链表
因为商还是商+1,到底多少个都是有规律的。官方给的是多次遍历,空间复杂度降低了。这属于一次遍历,但提升了空间复杂度。原创 2024-03-28 16:03:14 · 140 阅读 · 0 评论 -
leetcode:反转链表II
和官方思路是一样的,都是确定left左节点,right右节点。在确定要逆转链表的左右节点,之后调用之前写的反转链表代码即可。另外还有就是传参,你修改了之前反转链表函数,让其变为两个参数。就是1,2,3,4,5 left=1,right=1。另外你定义了flag变量,也不必这样。其实不必这样,切断联系即可。但有一种情况运行不通过。其他情况基本都能通过。原创 2024-03-22 17:04:31 · 134 阅读 · 0 评论 -
leetcode:有效三角形的个数
即判断nums[i]+nums[start]和nums[end]关系。如果你是从右往左,那就简单了,只有一种情况要么左移要么右移。如果非要这么写,可能比较复杂,想的比较多。那到底是右移还是左移,两种情况,不好说。这有个情况,如果前者小于等于后者。必须start右移或者end左移。我当时在写的时候i是从左往右。原创 2024-03-12 22:58:47 · 364 阅读 · 0 评论 -
leetcode:环形链表
第一次相遇表示有环形。原创 2024-03-25 15:19:44 · 123 阅读 · 0 评论