011:二叉树的层序遍历

LeetCode 102 https://leetcode.cn/problems/binary-tree-level-order-traversal/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 这道题是 BFS 的经典题目。本题使用两个数组 cur 和 nxt 来实现 BFS。 时间复杂度:O(n),其中 n 为二叉树的节点个数。 空间复杂度:O(n)。满二叉树(每一层都填满)最后一层有大约 n/2 个节点,因此数组中最多有 O(n) 个元素,所以空间复杂度是 O(n) 的。 ...

六月 28, 2025 · Cassius

010:最长回文子串

LeetCode 5 https://leetcode.cn/problems/longest-palindromic-substring/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题是字符串的经典题目,有 3 种做法,分别是动态规划,中心扩展法和马拉车算法。其中前两种做法的时间复杂度为\(O(n^2)\),马拉车算法的时间复杂度为\(O(n)\)。不过由于马拉车算法较为复杂,在这里使用的是实现较为简单的中心扩展算法。 中心扩展算法就是对于每一个元素,分别讨论子串长度为奇数和偶数的情况,如果子串两端的字符相同,就继续向外扩展。 时间复杂度:\(O(n^2)\),其中 n 是字符串的长度。长度为 1 和 2 的回文中心分别有 n 和 n−1 个,每个回文中心最多会向外扩展 O(n) 次。 空间复杂度:O(1)。 ...

六月 28, 2025 · Cassius

009:合并两个有序链表

LeetCode 21 https://leetcode.cn/problems/merge-two-sorted-lists/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 每次将 list1 和 list2 中较小值作为下一个节点,最后将剩余节点接在后面。 时间复杂度:O(n+m),其中 n 为 list 1 的长度,m 为 list 2 的长度。 空间复杂度:O(1)。仅用到若干额外变量。 ...

六月 27, 2025 · Cassius

008:手撕快速排序

本题为手撕快速排序,力扣上类似的题为 LeetCode 912 排序数组。 https://leetcode.cn/problems/sort-an-array/description/ 难度:中等。 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 需要注意的是,初始化 i = l - 1,j = r + 1,方便在循环开始时直接进行 i++ 和 j–,递归时边界分别是 [l, j] 和 [j + 1, r]。 时间复杂度:O(nlogn) 空间复杂度:O(logn) ...

六月 27, 2025 · Cassius

007:最大子数组和

LeetCode 53 https://leetcode.cn/problems/maximum-subarray/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题有两种做法,分别是前缀和以及动态规划。 前缀和的做法为维护最小前缀和,答案为当前前缀和减去最小前缀和。 动态规划的转移方程为 \(f[i] = max(f[i-1],0) + nums[i]\)。 时间复杂度:O(n),其中 n 为 nums 的长度。 空间复杂度:O(1)。仅用到若干额外变量。 ...

六月 27, 2025 · Cassius

006:三数之和

LeetCode 15 https://leetcode.cn/problems/3sum/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 首先,由于输出的顺序不重要,可以先将数组进行排序。然后,枚举第一个数,转化为两数之和 II(LeetCode 142)。为了排除重复答案,如果 i,j,k 与上一个元素相同,需要去重。 时间复杂度:O(\(n^ 2\)),其中 n 为 nums 的长度。排序 O(nlogn)。外层循环枚举第一个数,就变成 167. 两数之和 II - 输入有序数组 了,做法是 O(n) 双指针。所以总的时间复杂度为 O(\(n^ 2\))。 空间复杂度:O(1)。返回值不计入。忽略排序的栈开销。 ...

六月 27, 2025 · Cassius

005:K个一组翻转链表

LeetCode 25 https://leetcode.cn/problems/reverse-nodes-in-k-group/description/ 难度:困难 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 反转一组节点的代码与 LeetCode 206 类似,每次修改一个节点的 next。 ListNode* nxt = cur->next; cur->next = pre; pre = cur; cur = nxt; 需要注意的是,每次需要保存一组节点的上一个节点 p0,反转结束后,更新 p0 和 p0->next。 ListNode* nxt = p0->next; p0->next->next = cur; p0->next = pre; p0 = nxt; 时间复杂度:O(n),其中 n 为链表节点个数。 空间复杂度:O(1),仅用到若干额外变量。 ...

六月 25, 2025 · Cassius

004:数组中的第K个最大元素

LeetCode 215 https://leetcode.cn/problems/kth-largest-element-in-an-array/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 快速选择算法,类似快速排序。 时间复杂度:O(n) 空间复杂度:O(logn) ...

六月 25, 2025 · Cassius

003:反转链表

LeetCode 206 https://leetcode.cn/problems/reverse-linked-list/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题有迭代和递归两种解法,迭代法更易理解,且空间复杂度更优。 ...

六月 25, 2025 · Cassius

002:LRU缓存

LeetCode 146 https://leetcode.cn/problems/lru-cache/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题是双向链表和哈希表的经典题目。每个节点有 key,value,还有两个指针 prev 和 next 分别指向前一个和下一个节点。 此外,链表中还包含一个 dummy 节点,让每个节点的 prev 和 next 都不为空。 时间复杂度:所有操作均为 O(1)。 空间复杂度:O(min(p,capacity)),其中 p 为 put 的调用次数。 ...

六月 25, 2025 · Cassius