leetcode
加油开心
你好呀
展开
-
leetcode:二叉树的直径
最大直径就是一个节点的左子树最长长度+右子树最长长度+1。和子树有关,就是后序位置。原创 2024-04-11 22:09:18 · 160 阅读 · 0 评论 -
leetcode:二叉树的最大深度
第二种能否通过子问题答案推导出来。一种能否遍历一遍得到结果。这个题明显两种都可以。原创 2024-04-11 21:49:37 · 202 阅读 · 1 评论 -
leetcode一些基本语法问题(持续更新)
因为这样的话,你如果想把list清空,那么ans也会跟着改变,索引导致的。题目返回List<List>你可以建一个全局变量。原创 2024-04-11 21:02:07 · 89 阅读 · 0 评论 -
leetcode:二叉树的层序遍历
就是一层一层的,从上到下。每统计完一层,加进去。原创 2024-04-11 20:58:21 · 95 阅读 · 0 评论 -
leetcode:二叉树的后序遍历
【代码】leetcode:二叉树的后序遍历。原创 2024-04-11 15:36:09 · 85 阅读 · 0 评论 -
leetcode:二叉树的前序遍历
【代码】leetcode:二叉树的前序遍历。原创 2024-04-11 15:34:02 · 54 阅读 · 0 评论 -
leetcode:二叉树的中序遍历
很简单,直接写就行了。原创 2024-04-11 15:31:19 · 93 阅读 · 1 评论 -
leetcode:组合总和
之前子集组合如何保证不重复?就是start变量,下一个从start+1开始。这里start开始,下次还是start开始。比如1,2,3,target=3。原创 2024-04-10 23:08:38 · 107 阅读 · 0 评论 -
leetcode:全排列II
这个剪枝逻辑就是比如1,2,2‘,首先肯定是判断前后是否相等,然后还要加一条。因为1,2,2‘’,你2‘’前面是2‘,没用,直接2’‘,肯定要剪去。比如下图,最右边,你2都没用,直接2‘,剪去。你可以以1,2,2‘,2’‘为例想一下。只有1,2,2’不会剪,剩下都被剪去。2’只有在2用了的情况下才能使用。原创 2024-04-10 22:53:28 · 105 阅读 · 0 评论 -
leetcode:组合总和II
其实就是在元素可重复不可复选子集题里加一个变量用于记录和。再来一个if判断是否等于target即可。和元素可重复不可复选子集题差不多。原创 2024-04-10 22:36:24 · 150 阅读 · 0 评论 -
leetcode:子集II
所以这个截枝逻辑就是如果一个节点有相同的枝,比如下图左侧,1节点左边是2,右边也是2。即先对其排序,那么相同的节点会挨在一起,判断nums[i]是否等于nums[i-1]为啥要把1,3截去?你把1,3看成1,2’,那么和1,2一样了,重复了。你可以把3看成第二个2,即2‘下图是标准的子集组合决策树。那么只遍历一条,剩下剪掉。如果相等,那么剪掉一枝。子集I是无重无复选,原创 2024-04-10 22:20:02 · 106 阅读 · 0 评论 -
leetcode:组合
比如如下,我要取1,2,3中有2个元素的,取出来,即下放画横线的。只不过把子集那棵树的某一行取出来即可。这个和子集其实是一样的。原创 2024-04-10 21:52:22 · 121 阅读 · 0 评论 -
leetcode:子集
所以你看截枝的方法就是顺序不能搞乱,必须顺序,比如1,3就是顺序,1,2就是顺序,但3,1不行。比如1,3,2由于2在3后面,顺序搞反了,截掉。下面这个决策树抛开题是所有可能结果。2,1,1要在2前面,搞反了,截掉。截哪些应该很容易看出来。但我们想要的只有部分。原创 2024-04-10 21:41:51 · 132 阅读 · 0 评论 -
leetcode:N皇后II
这个和N皇后区别就是,这个是返回个数。改最后一行返回值即可。原创 2024-04-08 21:16:30 · 156 阅读 · 0 评论 -
leetcode:N皇后
你需要做出选择,还要记录走过的。每一行代表决策树的一层。原创 2024-04-08 21:01:11 · 141 阅读 · 0 评论 -
leetcode:全排列
返回的是数组里面有数组,那就是List那么该走那条路,比如1下来是2,还是3,used。需要记录已经走过的路,track。可以看成决策树,所以需要链表。原创 2024-04-08 09:51:58 · 153 阅读 · 0 评论 -
leetcode:下一个更大元素II
i = 2n-1,i%n就可以了,循环取数组值。当然你也可以不直接加倍,可以间接加倍。然后再套用求下一个更大元素模板即可。比如数组1,2,3,4,5,长度5。比如1,2构造成1,2,1,2。可以考虑构造成双倍数组。这里使用的是直接加倍。原创 2024-04-05 10:45:22 · 158 阅读 · 0 评论 -
leetcode:下一个更大元素I
就是nums1中元素的下一个更大,要在nums2先找到该元素,然后再nums2中求下一个更大。可以先建立一个哈希表,存储nums2中元素与其映射,然后根据nums1查找哈希表即可。常规做法就是for循环遍历nums1中每一个元素,求其在nums2中的下一个更大。就是nums1中元素的下一个更大。相对于单一数组求下一个更大元素。但这样做时间复杂度n平方。原创 2024-04-05 09:54:29 · 151 阅读 · 0 评论 -
leetcode:从链表中移除节点
就是把元素入栈,大下,小上,然后依次取出组合成链表即可。和单调栈整体框架其实差不多。这个题建议双端队列做。原创 2024-04-03 14:08:37 · 91 阅读 · 0 评论 -
leetcode:链表中的下一个更大节点
先获取链表长度,然后逆序链表,因为要从最后一个元素开始往里放。每压入一个元素,如果前面一个比他小那就弹出,重复,问题是链表,便麻烦了,思路不变。直到前面那个比他大即可。这样栈中就是单调递增的。之后就是上一段介绍的。原创 2024-04-03 13:41:04 · 220 阅读 · 0 评论 -
leetcode:删除链表的中间节点
这里使用pre变量记录上一个节点。只不过是没有记录上一个节点。之前有一道是求链表中点的。原创 2024-04-02 21:08:21 · 361 阅读 · 0 评论 -
leetcode:交换链表中的节点
比如1,2,3,4,倒数第3个节点和正数第3个节点相邻。思路就是记录前后节点位置交换而已。看起来简单,但要考虑一种情况。做法不同了,单独拿出来考虑。原创 2024-04-02 20:13:19 · 130 阅读 · 0 评论 -
leetcode:合并两个链表
就是记录一些节点的位置。原创 2024-04-02 18:29:36 · 130 阅读 · 0 评论 -
leetcode:给单链表加一
这不过另一个变为了只有一个节点且值是1的链表。原创 2024-04-02 16:19:30 · 142 阅读 · 0 评论 -
leetcode:重排链表
区别就是之前写的合并代码是按照一定大小合并的。这个更简单了,直接硬合并。然后二者依次合并即可。原创 2024-04-02 16:07:06 · 619 阅读 · 0 评论 -
leetcode:奇偶链表
【代码】leetcode:奇偶链表。原创 2024-03-28 16:58:00 · 168 阅读 · 0 评论 -
leetcode:分隔链表
因为商还是商+1,到底多少个都是有规律的。官方给的是多次遍历,空间复杂度降低了。这属于一次遍历,但提升了空间复杂度。原创 2024-03-28 16:03:14 · 110 阅读 · 0 评论 -
leetcode:旋转链表
接下来slow和fast一起走最终slow指针下一个指向的就是倒数第K个。接下来找倒数节点就不是按照上述了。用一个新节点从开头走长度-余数步。这个题我先把他变为环形链表。然后fast指针走k步。确实别上述要少走一点。原创 2024-03-28 14:08:05 · 164 阅读 · 0 评论 -
leetcode:回文链表
右边头直接就是middle的next,不管奇偶,都是。现在中点在第一个3,3的next就是右半部分的头。因为考虑了奇偶长度,我开始反转的是左半部分。这道题用了之前学的求链表中点,反转链表。之前是比如1,2,3,3,2,1偶数个。其实这个你仔细想,还是反转右边方便。先找到链表中点,然后右半部分反转。稍微把求链表中点改了下。思路是一样就是写不对。原创 2024-03-26 20:07:53 · 142 阅读 · 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 · 106 阅读 · 0 评论 -
leetcode:环形链表II
思路就是先是快慢指针,第一次相遇后,随便一个指针重新指向开头,然后不区分快慢指针,每个指针每次走一步,第二次相遇则是环形入口。因为有可能存在没有环的情况,退出while循环。比如下方while结束后紧接着一个if。要紧接着一个if来处理这种情况。原创 2024-03-25 16:53:37 · 140 阅读 · 0 评论 -
leetcode:环形链表
第一次相遇表示有环形。原创 2024-03-25 15:19:44 · 93 阅读 · 0 评论 -
leetcode:链表的中间节点
你一开始写的时候while里面,fast.next放在前面,报错,空指针。应该写在后面,对于偶数个元素的链表而言。快的到了末尾,慢的所指的就是中点。原创 2024-03-25 14:57:02 · 403 阅读 · 0 评论 -
leetcode:删除排序链表中的重复元素II
下一位就是4,还要继续判断4的下一位是不是也是4。对于1->2->3->3->4->4->5而言。你写的时候没有注意这一点,导致逻辑错误。应该比较fast的和fast下一个。就是我们之前写数组的删除重复元素。这道题他说只要是重复元素都删除。所以判断很多,直到选到5为止。是slow和fast比较。你判断了3下一位还是3。原创 2024-03-24 17:31:58 · 167 阅读 · 0 评论 -
leetcode:删除排序链表中的重复元素
最后一行slow.next = null。你不指向空的话,一整个链表全部返回了。这个代码是删除有序数组的重复元素。参考删除有序数组的重复元素。因为我们最后是返回head。原创 2024-03-24 15:13:31 · 91 阅读 · 0 评论 -
leetcode:排序链表
归并排序不就是不断划分,子链表合并,直到一整个链表排好序。这个可以使用归并排序,复杂度降为nlogn。我这里使用的是优先级队列。参考合并两个有序链表。原创 2024-03-24 14:39:55 · 151 阅读 · 0 评论 -
leetcode:合并两个有序数组
思路就是新建一个数组,对两个要排序的数组使用双指针。把没有走完的指针继续取值放到新数组即可。一个有序数组长5,一个长10。这样指针一个走完一个没走完。原创 2024-03-23 17:50:41 · 116 阅读 · 0 评论 -
leetcode:合并K个升序链表
最小值一定在3个链表的第一个元素中其中一个。这时候再往里面加入刚才弹出值的下一个节点。优先级定义那个a-b表示定义的是最小堆。然后进入循环里,弹出一个就是最小值。思路就是先往队列里加3个头节点。这时候在弹出一个也是最小值。原创 2024-03-23 16:27:09 · 164 阅读 · 0 评论 -
leetcode:删除链表的倒数第N个节点
下面findreverseNode函数是获取倒数第k个节点。p1指向开头,走k步,然后再定义一个p2指向开头。本办法的话你可以先一个for循环获取链表长度。相当于是我没有获取链表长度一样可以求出来。那么此时p2所指的就是倒数第k个节点。虚拟节点意思是为了防止空指针。如何获取倒数第K个节点?这时候p1一直走走到结尾。原创 2024-03-23 13:15:32 · 190 阅读 · 0 评论 -
leetcode:反转链表II
和官方思路是一样的,都是确定left左节点,right右节点。在确定要逆转链表的左右节点,之后调用之前写的反转链表代码即可。另外还有就是传参,你修改了之前反转链表函数,让其变为两个参数。就是1,2,3,4,5 left=1,right=1。另外你定义了flag变量,也不必这样。其实不必这样,切断联系即可。但有一种情况运行不通过。其他情况基本都能通过。原创 2024-03-22 17:04:31 · 101 阅读 · 0 评论