- 博客(25)
- 收藏
- 关注
原创 力扣hot100:二叉树
核心思路:递归,递归每个节点左右子树的深度,然后更新最长路径,也就是左右子树深度之和。关于递归用文字很难描述清楚,建议每次做的时候都用笔模拟一次,这样思路更清晰。简单说一下,就是不断向左遍历到最后一个节点,然后更新max(最长路径值),返回当前节点左子树或者右子树的高度,注意是子树!
2025-06-22 11:02:55
127
原创 力扣hot100:链表:148.排序链表
核心思路:利用递归分别处理左右两边链表,也就是递归排序。第一步是找到中点,如何利用快慢指针找到中点(掌握),接着断开链表,也就是分左右两边进行遍历,最后一层一层排序返回。1. 分:不断把序列分成左右两半,直到每部分只剩一个元素。2. 治:把左右两个有序数组“合并”为一个有序数组。递归排序:递归排序是一种。
2025-06-21 14:26:18
113
原创 力扣hot100:链表:138.随机链表复制
题目大致意思就是这个链表有两个指针:next和random,next指针指向下一个节点,random指针指向链表随机一个节点,而我需要复制这个链表,使得next指针指向原来的节点,random也指向原来的节点。因为我在添加进map的时候已经创建了节点,这个节点是包含next指针和random指针的,所以可以直接操作,不需要额外对指针进行保存。核心思路:先用hashMap保存原节点到新节点的映射,然后在对next和random进行操作。
2025-06-21 09:44:12
189
原创 力扣hot100:链表:24.两两交换链表中的节点
交换完节点之后,将cur更新为firstNode(此时的firstNode以已经被交换所以可以看作是secondNode), 然后继续下一组的遍历,所以可以看出交换一组所需要的条件就是需要有一个节点在firstNode的前面,方便记录节点位置。题目中说了,两两交换,那么初步思路就是我们可以以两个节点为一个单位去进行交换处理,那么怎么做到两两交换呢?核心思路:设置一个虚拟节点,方便后期返回头结点。cur = dummy(虚拟节点)
2025-06-20 22:06:17
216
原创 力扣hot100:链表:2.两数相加
对于这个题目解释:拿第一个链表的第一个数字举例,2是链表头,说明2是最开始存入链表的,也就代表了个位(342),所以为什么是倒着读而不是正着读。这是我们正常计算:那我们就要考虑两个问题了,就是进位(红色框框),以及如果单列计算超过10的我们只保留个位。因此我们需要新增一个变量carry来保存进位的数字,以我在下一列计算的时候带上这个carry变量。核心思路:342 + 465 = 807。更新当前位值和新进位。,别忘记加一个节点!
2025-06-20 21:31:37
207
原创 力扣hot100:链表:21.合并两个链表
核心思路:引入dummyhead,也就是一个虚拟节点,便于记录头结点。当两个list都不为空才进入循环,开始对比两个list的元素,小的放入新的list,循环结束后注意判断剩余情况。一开始想到如果有一个list为空的情况,所以会想到用if判断三种情况,但其实这一步可以直接放到最后一步做,用三位运算,而主体逻辑的条件就是两个list都不为空。
2025-06-19 13:52:39
218
原创 力扣hot100:链表:142.环形链表II
依旧是双指针,步骤于环形链表相同,但在相遇之后,需要设立一个指针从头开始,与相遇点的指针同步向前遍历,最后相遇的点就是环的起点。而因为fast指针每次走的距离是slow指针的两倍,所以可得:a + b + n * c = 2(a + b)也就是说从起点走a步到入环点,而从相遇点走c - b步就能到,所以当再次相遇的时候,这个点就是入环点。那么fast指针到相遇点所走的距离就是:a + b + n * c。那么slow指针到相遇点所走的距离就是:a + b。到入环点(D)的距离),这里的n一般来说就是1。
2025-06-19 13:16:20
278
原创 力扣hot100:数组:189.轮转数组
核心思路:将每个位置向右移动k个位置,遇到最后一个数字怎么办?利用公式:(i + k) % len即可完成。题目没有要求我们空间复杂度,因此可以用新数组接收,最后在将原数组覆盖。
2025-06-16 16:35:40
159
原创 力扣hot100:子串:560.和为k的子数组
而本题目要求我们在一个数组里找到是否有和为k的子数组,那么这个k不就等于上面这个公式吗,也就是前缀和,将公式变形,preSum[j] - k = preSum[i - 1],也就是说我们只需要找到HashMap中是否存在preSum[j] - k ,如果有就相当于这个前缀和的式子是成立的,说明有子数组和为k,但不需要去纠结是否那个和为k的区间在哪。注意:需要提前将前缀和为0 put进HashMap,方便计算,因为假如你此时的preSum就是k,那么preSum - k = 0,此时也是满足条件的。
2025-06-12 10:21:06
154
原创 力扣hot100:滑动窗口:438.找到字符串中所有字母异位词
首先将子串内的字母出现频率记录,然后开始从头遍历字符串,向右边添加元素一直到滑动窗口的长度,并且比较滑动窗口内字母出现频率是否与子串字母出现频率相同,相同则计算滑动窗口起始下标。时间复杂度为O(n),仅仅遍历了一遍数组。核心思路:利用滑动窗口内字母出现频率与子串相比较,如果一样则返回窗口起始下标。1、 固定长度滑动窗口(如:查找所有长度为 k 的子串)2、动态大小滑动窗口(如:最小覆盖子串)处理窗口中的数据并判断。右指针不断向右扩展窗口。左指针根据条件收缩窗口。每次向右滑动一个字符。直到满足或不满足条件。
2025-06-10 14:52:45
133
原创 力扣hot100:双指针:283.移动零
当遍历到的数字不等于0时,就添加到慢指针下标的新数组中(这个新数组其实就是原来的数组,并没有初始化新的数组,只是更新下标对应的值)。用一个变量单独计算数组中0的数量,用while循环将0添加到数组末尾。慢指针记录新数组下标,快指针遍历数组。
2025-06-09 23:42:49
205
原创 力扣hot100:字符串:49. 字母异位词分组
什么意思(函数式编程)1、Arrays.sort()只能用于字符数组,因此如果是String类型需要转成char[].,这样就统计了字母异位字符串。,将每个字符串按照字母。
2025-06-07 19:51:13
201
空空如也
redis黑马点评登陆问题
2025-06-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人