130:二叉树展开为链表

LeetCode 114 https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 采用头插法构建链表,按照右子树 - 左子树 - 根的顺序 DFS 这棵树。DFS 的同时,记录当前链表的头节点为 head。一开始 head 是空节点。 具体来说: 如果当前节点为空,返回。 递归右子树。 递归左子树。 把 root.left 置为空。 头插法,把 root 插在 head 的前面,也就是 root.right=head。 现在 root 是链表的头节点,把 head 更新为 root。 时间复杂度:O(n),其中 n 是二叉树的节点个数。 空间复杂度:O(n)。递归需要 O(n) 的栈空间。 ...

七月 15, 2025 · Cassius

129:排序奇升偶降链表

补充题 1 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 给定一个奇数位升序,偶数位降序的链表,将其重新排序。 将链表拆分成两个链表:奇数节点链表和偶数节点链表。 奇数节点链表:位置 1,3,5,…的节点,原链表奇数位置升序,所以奇数节点链表是升序的。 偶数节点链表:位置 2,4,6,…的节点,原链表偶数位置降序,所以偶数节点链表是降序的。 将偶数节点链表反转,因为降序反转后变成升序。 合并两个升序链表(奇数链表和反转后的偶数链表),合并成新的升序链表。 时间复杂度:O(n)。 空间复杂度:O(1)。 ...

七月 15, 2025 · Cassius

128:检测循环依赖

补充题 23 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 三色染色法,拓扑排序,检测是否有环。 时间复杂度:O(n+m),其中 n 是 numCourses,m 是 prerequisites 的长度。每个节点至多递归访问一次,每条边至多遍历一次。 空间复杂度:O(n+m)。存储 g 需要 O(n+m) 的空间。 ...

七月 15, 2025 · Cassius

127:整数反转

LeetCode 7 https://leetcode.cn/problems/reverse-integer/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 模拟即可。需要判断答案是否会溢出,如果会溢出直接返回 0。 时间复杂度:O(log∣x∣)。翻转的次数即 x 十进制的位数。 空间复杂度:O(1)。 ...

七月 15, 2025 · Cassius

126:数组中的逆序对

LCR 170 https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-dui-lcof/description/ 难度:困难 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 求数组中的逆序对只需要在归并排序的代码的基础上添加一行代码即可。当 nums[i] > nums[j] 时,说明从 i 到 mid 这 (mid - i + 1) 个元素都与 j 构成了逆序对,更新全局变量 cnt。 if (nums[i] <= nums[j]) { tmp[k] = nums[i]; i++; } else { cnt += (mid - i + 1); tmp[k] = nums[j]; j++; } 时间复杂度:O(nlogn)。由于归并排序每次都将当前待排序的序列折半成两个子序列递归调用,然后再合并两个有序的子序列,而每次合并两个有序的子序列需要 O(n) 的时间复杂度,根据主定理我们可以得出归并排序的时间复杂度为 O(nlogn)。 空间复杂度:O(n)。我们需要额外 O(n) 空间的 tmp 数组,且归并排序递归调用的层数最深为 logn,所以我们还需要额外的 O(logn) 的栈空间,所需的空间复杂度即为 O(n+logn) = O(n)。 ...

七月 15, 2025 · Cassius

125:搜索二维矩阵

LeetCode 74 https://leetcode.cn/problems/search-a-2d-matrix/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 二分查找,二分开区间为 [-1, mn],对于 mid,对应元素为 matrix[mid / n][mid % n]。 时间复杂度:O(log(mn)),其中 m 和 n 分别为 matrix 的行数和列数。 空间复杂度:O(1)。 ...

七月 15, 2025 · Cassius

124:删除排序数组中的重复项

LeetCode 26 https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 双指针,维护保留元素的个数。 时间复杂度:O(n),其中 n 是 nums 的长度。 空间复杂度:O(1)。 ...

七月 15, 2025 · Cassius

123:最接近的三数之和

LeetCode 16 https://leetcode.cn/problems/3sum-closest/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题比三数之和增加了一个 min_diff 变量维护 |s - target| 最小值。 时间复杂度:\(O(n^2)\),其中 n 为 nums 的长度。排序 O(nlogn)。外层循环枚举第一个数,然后 O(n) 双指针。所以总的时间复杂度为 \(O(n^2)\)。 空间复杂度:O(1)。返回值不计入,忽略排序的栈开销。 ...

七月 15, 2025 · Cassius

122:组合总和II

LeetCode 40 https://leetcode.cn/problems/combination-sum-ii/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 为了避免得到重复的答案,首先对数组排序。如果选,递归到 i + 1,如果不选,跳过所有等于当前数的数,递归到 i + k。也就是对于相同的元素,只能按照顺序选,不能跳过一个选后面的。 时间复杂度:\(O(n\*2^2)\) 空间复杂度:O(n) ...

七月 15, 2025 · Cassius

121:二叉搜索树与双向链表

LCR 155 https://leetcode.cn/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 使用中序遍历遍历二叉树搜索树,定义变量 head,pre,当前节点 cur,cur->left = pre,pre->right = cur。最后 pre 指向最后一个节点,更新 head->left = pre,pre->right = head。 时间复杂度:O(n) 空间复杂度:O(n) ...

七月 15, 2025 · Cassius