136:颜色分类

LeetCode 75 https://leetcode.cn/problems/sort-colors/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ O(1) 插入元素 不是插入元素,而是修改元素! 维护 a 中 0 的个数,即改为 0 的位置,记作 p0。维护 a 中 0 和 1 的个数,即改为 1 的位置,记作 p1。 首先将 x 改为 2,如果 x <= 1,nums[p1++] = 1,如果 x == 0,nums[p0++] = 0。 时间复杂度:O(n),其中 n 是 nums 的长度。 空间复杂度: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

113:盛最多水的容器

LeetCode 11 https://leetcode.cn/problems/container-with-most-water/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 相向双指针。容器的容积是由左右两端较低的一方决定的。如果保留较低的一端,另一端相向移动。假设新的另一端比他要高,那么最低的还是他,宽度变小了,容积也变小了。假设另一端比他还低,那么宽度变小了,高度也变小了,容积还是变小。因此如果要得到更大的容积,就不能保留较低的一端,需要移动他。 时间复杂度:O(n),其中 n 为 height 的长度。 空间复杂度:O(1),仅用到若干额外变量。 ...

七月 15, 2025 · Cassius

077:搜索二维矩阵II

LeetCode 240 https://leetcode.cn/problems/search-a-2d-matrix-ii/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 排除法。比较剩余矩阵右上角的元素 matrix[i][j] 和 target。如果更小,说明这一行所有元素都小于 target,i++。如果更大,说明这一列所有元素都大于 target,j–。直到找到 target 或矩阵为空。 时间复杂度:O(m+n),其中 m 和 n 分别为 matrix 的行数和列数。 空间复杂度:O(1)。 ...

七月 4, 2025 · Cassius

058:链表中倒数第 k 个节点

LCR 140 https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 前后指针找链表倒数第 k 个节点。 时间复杂度:O(n),其中 n 为链表的长度。我们使用快慢指针,只需要一次遍历即可,复杂度为 O(n)。 空间复杂度:O(1)。 ...

七月 3, 2025 · Cassius

041:比较版本号

LeetCode 165 https://leetcode.cn/problems/compare-version-numbers/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 使用两个指针,遍历两个字符串,直到找到’.’,将每一段的版本号转换为整数,比较两个整数是否相等。整数初始化为 0,以处理这一段版本号缺失的情况。 时间复杂度:O(n+m),其中 m 是字符串 version1 的长度,n 是字符串 version2 的长度。 空间复杂度:O(1),我们只需要常数的空间保存若干变量。 ...

七月 1, 2025 · Cassius

034:环形链表 II

LeetCode 142 https://leetcode.cn/problems/linked-list-cycle-ii/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 环形链表 II,比环形链表 I 多了需要找到入环节点。 设头节点到入环口需要走 a 步,环长为 c。快慢指针相遇时,慢指针走了 b 步,快指针走了 2b 步。设快指针比慢指针多走了 k 圈,即 2b - b = kc,得 b = kc。 慢指针在入环口开始,在环中走了 b - a = kc - a 步到达相遇点。这说明从相遇点开始,再走 a 步,就恰好到达相遇点。 如果让头节点和慢指针同时走,恰好 a 步后二者必定相遇,且相遇点就在入环口。 时间复杂度:O(n),其中 n 为链表的长度。 空间复杂度:O(1),仅用到若干额外变量。 ...

六月 30, 2025 · Cassius

029:相交链表

LeetCode 160 https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 最简单的方法是使用哈希集合来记录访问过的节点。除此之外还有双指针的做法。 我来到你的城市,走过你来时的路。 初始化两个指针 p = headA, q = headB。 不断循环,直到 p == q。 每次循环,p 和 q 各向后走一步。具体来说,如果 p 不是空节点,那么更新 p 为 p->next,否则更新 p 为 headB;如果 q 不是空节点,那么更新 q 为 q->next,否则更新 q 为 headA。 循环结束时,如果两条链表相交,那么此时 p 和 q 都在相交的起始节点处,返回 p;如果两条链表不相交,那么 p 和 q 都走到空节点,所以也可以返回 p,即空节点。 时间复杂度:O(m+n),其中 m 是第一条链表的长度,n 是第二条链表的长度。除了交点,每个节点会被指针 p 访问至多一次,每个节点会被指针 q 访问至多一次。 空间复杂度:O(1)。 ...

六月 29, 2025 · Cassius

022:环形链表

LeetCode 141 https://leetcode.cn/problems/linked-list-cycle/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 这道题目的做法是快慢指针。快指针每次走两步,慢指针每次走一步,如果快慢指针相等,说明链表有环。 时间复杂度:O(n),其中 n 为链表的长度。 空间复杂度:O(1),仅用到若干额外变量。 ...

六月 29, 2025 · Cassius