- ✨ 欢迎来到我的个人博客
- 🔭 我目前的研究兴趣包括深度学习以及 Web 开发
005:K个一组翻转链表
LeetCode 25 https://leetcode.cn/problems/reverse-nodes-in-k-group/description/ 难度:Hard 反转一组节点的代码与 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),仅用到若干额外变量。 ...
004:数组中的第K个最大元素
LeetCode 215 https://leetcode.cn/problems/kth-largest-element-in-an-array/description/ 快速选择算法,类似快速排序。 时间复杂度:O(n) 空间复杂度:O(logn) ...
003:反转链表
LeetCode 206 https://leetcode.cn/problems/reverse-linked-list/description/ 难度:Easy 本题有迭代和递归两种解法,迭代法更易理解,且空间复杂度更优。 ...
002:LRU缓存
LeetCode 146 https://leetcode.cn/problems/lru-cache/description/ 难度:Mid 本题是双向链表和哈希表的经典题目。每个节点有 key,value,还有两个指针 prev 和 next 分别指向前一个和下一个节点。 此外,链表中还包含一个 dummy 节点,让每个节点的 prev 和 next 都不为空。 时间复杂度:所有操作均为 O(1)。 空间复杂度:O(min(p,capacity)),其中 p 为 put 的调用次数。 ...
001:无重复字符的最长子串
LeetCode 0003 https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/ 难度:Mid 本题为经典的哈希表加滑动窗口的题目,哈希表统计窗口内字符出现次数,如果窗口右端点字符出现次数大于 1,右移左端点,直到无重复字符,最后更新答案。窗口的长度为 right - left + 1。 时间复杂度:O(n),其中 n 为 s 的长度。注意 left 至多增加 n 次,所以整个二重循环至多循环 O(n) 次。 空间复杂度:O(∣Σ∣),其中 ∣Σ∣ 为字符集合的大小,本题中字符均为 ASCII 字符,所以 ∣Σ∣≤128。 ...
三色标记法求拓扑排序
本文介绍用三色标记法求拓扑排序。例题:LeetCode 210 课程表 II。 ...
Floyd全源最短路算法
之前介绍了 Dijkstra 单源最短路算法,本文介绍 Floyd 全源最短路算法。例题: LeetCode 1334 阈值距离内邻居最少的城市。 ...
并查集
并查集是一种求图的连通分量数量的算法。 ...
快速幂算法
LeetCode 50 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,\(x^n\) )。 ...
快速排序和第 K 小的数
本文介绍快速排序算法以及基于快速排序的选择方法的实现。 ...