- 博客(791)
- 收藏
- 关注
原创 leetcode一些基本语法问题(持续更新)
因为这样的话,你如果想把list清空,那么ans也会跟着改变,索引导致的。题目返回List<List>你可以建一个全局变量。
2024-04-11 21:02:07 87
原创 leetcode:组合总和
之前子集组合如何保证不重复?就是start变量,下一个从start+1开始。这里start开始,下次还是start开始。比如1,2,3,target=3。
2024-04-10 23:08:38 107
原创 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 104
原创 leetcode:组合总和II
其实就是在元素可重复不可复选子集题里加一个变量用于记录和。再来一个if判断是否等于target即可。和元素可重复不可复选子集题差不多。
2024-04-10 22:36:24 150
原创 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 105
原创 leetcode:组合
比如如下,我要取1,2,3中有2个元素的,取出来,即下放画横线的。只不过把子集那棵树的某一行取出来即可。这个和子集其实是一样的。
2024-04-10 21:52:22 121
原创 leetcode:子集
所以你看截枝的方法就是顺序不能搞乱,必须顺序,比如1,3就是顺序,1,2就是顺序,但3,1不行。比如1,3,2由于2在3后面,顺序搞反了,截掉。下面这个决策树抛开题是所有可能结果。2,1,1要在2前面,搞反了,截掉。截哪些应该很容易看出来。但我们想要的只有部分。
2024-04-10 21:41:51 131
原创 leetcode:全排列
返回的是数组里面有数组,那就是List那么该走那条路,比如1下来是2,还是3,used。需要记录已经走过的路,track。可以看成决策树,所以需要链表。
2024-04-08 09:51:58 152
原创 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
原创 leetcode:下一个更大元素I
就是nums1中元素的下一个更大,要在nums2先找到该元素,然后再nums2中求下一个更大。可以先建立一个哈希表,存储nums2中元素与其映射,然后根据nums1查找哈希表即可。常规做法就是for循环遍历nums1中每一个元素,求其在nums2中的下一个更大。就是nums1中元素的下一个更大。相对于单一数组求下一个更大元素。但这样做时间复杂度n平方。
2024-04-05 09:54:29 150
原创 leetcode:链表中的下一个更大节点
先获取链表长度,然后逆序链表,因为要从最后一个元素开始往里放。每压入一个元素,如果前面一个比他小那就弹出,重复,问题是链表,便麻烦了,思路不变。直到前面那个比他大即可。这样栈中就是单调递增的。之后就是上一段介绍的。
2024-04-03 13:41:04 218
原创 leetcode:交换链表中的节点
比如1,2,3,4,倒数第3个节点和正数第3个节点相邻。思路就是记录前后节点位置交换而已。看起来简单,但要考虑一种情况。做法不同了,单独拿出来考虑。
2024-04-02 20:13:19 128
原创 leetcode:旋转链表
接下来slow和fast一起走最终slow指针下一个指向的就是倒数第K个。接下来找倒数节点就不是按照上述了。用一个新节点从开头走长度-余数步。这个题我先把他变为环形链表。然后fast指针走k步。确实别上述要少走一点。
2024-03-28 14:08:05 164
原创 leetcode:回文链表
右边头直接就是middle的next,不管奇偶,都是。现在中点在第一个3,3的next就是右半部分的头。因为考虑了奇偶长度,我开始反转的是左半部分。这道题用了之前学的求链表中点,反转链表。之前是比如1,2,3,3,2,1偶数个。其实这个你仔细想,还是反转右边方便。先找到链表中点,然后右半部分反转。稍微把求链表中点改了下。思路是一样就是写不对。
2024-03-26 20:07:53 142
原创 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 105
原创 leetcode:环形链表II
思路就是先是快慢指针,第一次相遇后,随便一个指针重新指向开头,然后不区分快慢指针,每个指针每次走一步,第二次相遇则是环形入口。因为有可能存在没有环的情况,退出while循环。比如下方while结束后紧接着一个if。要紧接着一个if来处理这种情况。
2024-03-25 16:53:37 139
原创 leetcode:链表的中间节点
你一开始写的时候while里面,fast.next放在前面,报错,空指针。应该写在后面,对于偶数个元素的链表而言。快的到了末尾,慢的所指的就是中点。
2024-03-25 14:57:02 401
原创 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
原创 leetcode:删除排序链表中的重复元素
最后一行slow.next = null。你不指向空的话,一整个链表全部返回了。这个代码是删除有序数组的重复元素。参考删除有序数组的重复元素。因为我们最后是返回head。
2024-03-24 15:13:31 91
原创 leetcode:排序链表
归并排序不就是不断划分,子链表合并,直到一整个链表排好序。这个可以使用归并排序,复杂度降为nlogn。我这里使用的是优先级队列。参考合并两个有序链表。
2024-03-24 14:39:55 151
原创 leetcode:合并两个有序数组
思路就是新建一个数组,对两个要排序的数组使用双指针。把没有走完的指针继续取值放到新数组即可。一个有序数组长5,一个长10。这样指针一个走完一个没走完。
2024-03-23 17:50:41 116
原创 leetcode:合并K个升序链表
最小值一定在3个链表的第一个元素中其中一个。这时候再往里面加入刚才弹出值的下一个节点。优先级定义那个a-b表示定义的是最小堆。然后进入循环里,弹出一个就是最小值。思路就是先往队列里加3个头节点。这时候在弹出一个也是最小值。
2024-03-23 16:27:09 164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人