移除元素
简单Remove Element
原地删除数组中所有等于 val 的元素,返回新长度。
算法分析(Algorithm Analysis)的形式化定义、五类渐近记号(Bachmann 1894《Analytische Zahlentheorie》大 O 符号、Landau 1909《Handbuch》推广、Knuth 1976《Big Omicron and Big Omega and Big Theta》SIGACT News 12(3):36-44 系统化)、计算复杂性类(Hartmanis-Stearns 1965《On the Computational Complexity of Algorithms》Trans. AMS 117:285-306、Cobham 1964/Edmonds 1965 P 类、Cook 1971《The Complexity of Theorem-Proving Procedures》STOC、Karp 1972《Reducibility Among Combinatorial Problems》STOC 197-206)、主定理(Bentley-Haken-Saxe 1980 SIGACT News 12(3):36-44)、摊还分析(Sleator-Tarjan 1985《Amortized Efficiency of List Update and Paging Rules》CACM 28(2):202-208)、随机化分析(Rabin 1976)、时空权衡策略与系统化学习路线图,涵盖 Turing 1936《On Computable Numbers》Proc. LMS 42:230-265、Knuth 1968 TAOCP Vol.1、Cormen-Leiserson-Rivest 1990《Introduction to Algorithms》第 1 版的历史脉络,附 Python/C++/Java 多语言实现与 CLRS 第 1-4 章、Kleinberg-Tardos 第 2-5 章。
数组(Array)与动态数组(Dynamic Array)的连续内存模型、随机访问 $O(1)$ 原理、倍增扩容均摊 $O(1)$ 分析、行优先/列优先多维布局、稀疏数组 CSR/CSC、双指针/滑动窗口/前缀和/差分等核心技巧,涵盖 Von Neumann 1945 EDVAC、Iverson 1962 APL、Stepanov 1994 STL 等历史脉络,附 Python/C++/Java 多语言实现与 CLRS 第 10 章。
栈(Stack)与队列(Queue)的形式化定义、LIFO/FIFO 原理、顺序栈/链式栈/循环队列/链式队列/双端队列/单调栈/单调队列的实现与复杂度分析,涵盖 Bauer-Samelson 1955 叠加原理、Dijkstra 1965 信号量、Hoare 1978 CSP 等历史脉络,附 Python/C++/Java 多语言实现。
搜索(Search)算法的形式化定义、状态空间图模型、完备性与最优性证明、线性搜索 $O(n)$、二分搜索 $O(\log n)$、哈希查找 $O(1)$、BFS/DFS 图搜索 $O(V+E)$、双向 BFS、迭代深化 DFS(IDDFS)、A* 启发式搜索(Hart-Nilsson-Raphael 1968)、IDA* 内存受限搜索(Korf 1985)、Minimax + Alpha-Beta 剪枝博弈树搜索(Shannon 1950、Knuth-Moore 1975)的原理、实现与对比分析,涵盖 Shannon 1950 国际象棋程序、Dijkstra 1959 最短路径、Hart-Nilsson-Raphael 1968 A*、Korf 1985 IDA* 等历史脉络,附 Python/C++/Java 多语言实现与 CLRS 第 22 章。
单链表、双链表与环形链表的原理、操作复杂度分析与多语言实现,涵盖常见面试题型。
哈希表(Hash Table)的形式化定义、哈希函数设计(除法/乘法/全域/多项式滚动)、冲突处理(链地址法/开放寻址法/布谷鸟哈希)、扩容与再哈希、一致性哈希、Bloom Filter 与 LRU/LFU 缓存的工程实现,附 Python/C++/Java 多语言实现。
树(Tree)的形式化定义、二叉树遍历、二叉搜索树(BST)、AVL 树、红黑树、B 树/B+ 树、Splay 伸展树、Treap 树堆、Trie 字典树、LSM 树的原理、复杂度分析与多语言实现,附 Python/C++/Java 实现。
堆(Heap)与优先队列(Priority Queue)的完全二叉树数组表示、最大堆/最小堆的堆序性质、上浮与下沉操作、Floyd 建堆 $O(n)$ 证明、堆排序、Top-K 问题、索引堆、二项堆、Fibonacci 堆、配对堆的对比分析,涵盖 Williams 1964 Algorithm 232 Heapsort、Floyd 1964 Algorithm 245 Treesort、Vuillemin 1978 二项堆、Fredman-Tarjan 1984 Fibonacci 堆等历史脉络,附 Python/C++/Java 多语言实现与 CLRS 第 6 章。
二叉搜索树(BST)、AVL 树(Adelson-Velsky-Landis 1962《An algorithm for the organization of information》Dokl. Akad. Nauk SSSR 146:263-266)、2-3 树(Hopcroft 1970)、红黑树(Bayer 1972 原始版对称二叉 B 树;Guibas-Sedgewick 1978《A Dichromatic Framework for Balanced Trees》FOCS 19th Annual Symposium 现代版;Sedgewick 2008 Left-Leaning Red-Black BST)、B 树(Bayer-McCreight 1972《Organization and Maintenance of Large Ordered Indexes》Acta Informatica 1(3):173-189)、B+ 树(Knuth 1973 TAOCP Vol.3 系统化;Comer 1979《The Ubiquitous B-Tree》Computing Surveys 11(2):121-137)、Splay 树(Sleator-Tarjan 1985《Self-Adjusting Binary Search Trees》JACM 32(3):652-686 DOI:10.1145/3828.3835)、Treap(Seidel-Aragon 1996)、AA 树(Andersson 1993)的形式化定义、旋转操作、平衡不变式与摊还分析、复杂度证明,覆盖 MySQL InnoDB B+ 树聚簇索引 / Linux CFS 红黑树 / Java TreeMap / C++ std::map / PostgreSQL B-tree 等工业案例,附 Python / C++ / Java 多语言实现。
排序(Sorting)算法的形式化定义、比较排序下界 $\Omega(n \log n)$ 的决策树证明、冒泡/选择/插入/希尔/归并/堆排/快排七大经典排序、计数/基数/桶排序三种线性时间非比较排序、内省排序(Musser 1997)与 Timsort(Peters 2002)的工业级混合方案,涵盖 von Neumann 1945 归并、Shell 1959 希尔、Hoare 1961 快排、Williams 1964 堆排、Musser 1997 内省、Peters 2002 Timsort 的历史脉络,附 Python/C++/Java 多语言实现。
查找(Search)算法的形式化定义、顺序查找 $O(n)$、二分查找 $O(\log n)$、插值查找 $O(\log \log n)$、斐波那契查找、哈希查找 $O(1)$、BST/AVL/红黑树查找、B 树查找、跳表查找(Pugh 1990)、字符串查找(KMP 1977、Boyer-Moore 1977、Rabin-Karp)、布隆过滤器(Bloom 1970)的原理、实现与对比分析,涵盖 Mauchly 1946 二分查找、Luhn 1953 哈希表、Bayer-McCreight 1972 B 树、Guibas-Sedgewick 1978 红黑树、Bloom 1970 布隆过滤器、Knuth-Morris-Pratt 1977 KMP、Boyer-Moore 1977 字符串匹配等历史脉络,附 Python/C++/Java 多语言实现与 CLRS 第 11/12/13 章。
分治(Divide and Conquer)算法的形式化定义、三步范式(分解-解决-合并)、递推关系 $T(n) = aT(n/b) + f(n)$ 与主定理(Master Theorem, Bentley-Haken-Saxe 1980)三种情况的完整证明、分治与递归的关系、归并排序(von Neumann 1945 EDVAC)、快速排序(Hoare 1961)、Karatsuba 大整数乘法(Karatsuba-Ofman 1963 Soviet Physics-Doklady 7:595-596)、Strassen 矩阵乘法(Strassen 1969 Numerische Mathematik 13(4):354-356)、快速傅里叶变换 FFT(Cooley-Tukey 1965 Mathematics of Computation 19:297-301)、最近点对(Bentley-Shamos 1976)的原理、实现与对比分析,涵盖 von Neumann 1945 EDVAC、Karatsuba 1960 莫斯科大学研讨会、Cooley-Tukey 1965 IBM Watson、Strassen 1969 突破 $O(n^3)$、Bentley-Haken-Saxe 1980 主定理的历史脉络,附 Python/C++/Java 多语言实现与 CLRS 第 2/4/7 章。
贪心(Greedy)算法的形式化定义、贪心选择性质与最优子结构、拟阵理论(Edmonds 1971)统一框架、交换论证/保持领先/势能下降三大正确性证明方法、活动选择、哈夫曼编码(Huffman 1952)、Kruskal 最小生成树(Kruskal 1956)、Prim 最小生成树(Prim 1957)、Dijkstra 单源最短路(Dijkstra 1959)、分数背包、任务调度、区间调度的原理、实现与对比分析,涵盖 Huffman 1952 MIT、Kruskal 1956 Proc. AMS、Prim 1957 BSTJ、Dijkstra 1959 Numerische Mathematik、Rado 1957、Edmonds 1971 Mathematical Programming 的历史脉络,附 Python/C++/Java 多语言实现与 CLRS 第 16/23/24 章。
递归(Recursion)的形式化定义、递归三要素(基线条件/递归条件/状态收缩)、递归树模型与主定理回顾、尾递归优化(TCO)、记忆化递归(Memoization)、回溯算法(Backtracking, Golomb-Baumert 1965 JACM 12(4):516-524)的系统化模板(选择-递归-撤销)、子集/排列/组合/N 皇后(Bezzel 1848)/数独/分割/括号生成/单词搜索的原理、实现与剪枝优化(排序剪枝/边界剪枝/条件剪枝/记忆化剪枝/位运算剪枝)、分支限界法(Land-Doig 1960)与 Dancing Links(Knuth 2000)的原理、对比分析与工程实践,涵盖 McCarthy 1960 LISP 递归系统化、Golomb-Baumert 1965 回溯法、Tarjan 1972 DFS、Bezzel 1848 N 皇后、Land-Doig 1960 分支限界、Knuth 2000 Dancing Links 的历史脉络,附 Python/C++/Java 多语言实现与 CLRS第4/22章、Kleinberg-Tardos第5章。
动态规划的 Bellman 最优性原理、最优子结构与重叠子问题形式化定义、状态转移方程代数表示、复杂度分析,覆盖一维/二维/区间/树形/状压/数位 DP 与背包、LCS、LIS、编辑距离等经典问题,附多语言实现。
状态压缩动态规划(Bitmask Dynamic Programming):以二进制位编码子集状态,将指数级状态空间压缩至 $O(2^n \cdot n)$ 的可处理范围。系统化梳理 Bellman 1957《Dynamic Programming》Princeton University Press 开山之作、Held-Karp 1962《A Dynamic Programming Approach to Sequencing Problems》J. SIAM 10(1):196-210 DOI:10.1137/0110015 旅行商问题(TSP)$O(n^2 2^n)$ 算法、bitmask DP 系统化方法,覆盖 TSP、N 皇后、数独、划分等和子集、棋盘覆盖、排列型 DP 五大经典问题,含位运算技巧(`& | ^ ~`、`<< >>`、`__builtin_popcount`、低比特 `x & (-x)`、子集枚举 `(sub - 1) & S`)、与记忆化递归、自底向上 DP、滚动数组的对比,附 Python/C++/Java 多语言实现与 LeetCode 1879/1655/1494/1125/1931 经典题解,及在 Google OR-Tools、CP-SAT 求解器、Concorde TSP 求解器中的工业级应用。
图的形式化定义、表示方法、遍历算法、最短路径、最小生成树、强连通分量与拓扑排序,附正确性证明、复杂度分析与多语言实现,覆盖 CLRS 4th 风格教学大纲。
并查集(Disjoint Set Union, DSU / Union-Find)数据结构的形式化定义、路径压缩与按秩合并的均摊复杂度分析(反 Ackermann 函数 α(n))、Kruskal 最小生成树/连通分量/冗余连接等典型应用,附 Python/C++/Java 多语言实现。
Floyd-Warshall 多源最短路径算法:Robert W. Floyd 1962《Algorithm 97: Shortest Path》CACM 5(6):345 DOI:10.1145/367766.368168 与 Stephen Warshall 1962《A Theorem on Boolean Matrices》JACM 9(1):11-12 DOI:10.1145/321105.321107 独立提出的动态规划算法,Bernard Roy 1959 更早发现传递闭包版本。算法以 $O(n^3)$ 时间、$O(n^2)$ 空间求解所有顶点对最短路径,支持负权边(无负环),可用于负环检测与传递闭包计算。本文涵盖 DP 状态设计、最优子结构证明、路径重建、位运算优化、与 Dijkstra/Bellman-Ford/Johnson 算法的对比、在 OSPF 路由协议与 NetworkX 工业级库中的应用,附 Python/C++/Java 多语言实现。
Kruskal 最小生成树算法:Joseph B. Kruskal 1956《On the Shortest Spanning Subtree of a Graph》Proceedings of the American Mathematical Society 7(1):48-50 DOI:10.1090/S0002-9939-1956-0078686-7 提出的贪心加边算法,与 Prim 1957、Jarník 1930、Borůvka 1926 共同构成 MST 算法家族。算法以 $O(E \log E)$ 时间、$O(V)$ 空间求解连通无向加权图的最小生成树,借助并查集(Tarjan 1975 路径压缩+按秩合并)实现高效的环检测。本文涵盖贪心选择性质证明、切割性质与回路性质、与 Prim/Borůvka 算法的对比、最小生成森林/次小生成树/TSP 2-近似应用、NetworkX 与 Boost Graph Library 工业级实现,附 Python/C++/Java 多语言实现。
拓扑排序(Topological Sort)算法:Arthur B. Kahn 1962《Topological Sorting of Large Networks》Communications of the ACM 5(11):558-562 DOI:10.1145/368996.369025 提出的入度法(Kahn 算法/BFS),与 Robert Endre Tarjan 1972《Depth-First Search and Linear Graph Algorithms》SIAM Journal on Computing 1(2):146-160 DOI:10.1137/0201010 给出的 DFS 后序逆序线性时间算法共同构成两大主流方案。Donald E. Knuth 在《The Art of Computer Programming, Volume 1: Fundamental Algorithms》§2.2.3 系统化讨论拓扑排序与计算机科学中的等价问题。本文涵盖 DAG(有向无环图)的形式化定义、Kahn 与 DFS 算法的正确性证明、与强连通分量(Tarjan 1972)及关键路径法(CPM, Kelly-Walker 1957;PERT, Malcolm-Roseboom-Clark-Fazar 1959)的关系、编译器依赖分析、Make/Build 系统、课程先修关系、并行任务调度等工业级应用,附 Python/C++/Java 多语言实现。
网络流算法:流网络形式化定义 (G,s,t,c,f)、最大流最小割定理、Ford-Fulkerson 方法 O(E·|f*|)、Edmonds-Karp 算法 O(VE²)、Dinic 算法 O(V²E)、Push-Relabel 算法 O(V²E)/O(V³)、ISAP、最小费用最大流、网络单纯形,覆盖二分图匹配、Project Selection、Image Segmentation、Baseball Elimination、Airline Scheduling 等工程应用,附多语言实现。
字符串匹配的形式化定义(模式串在主串中的出现位置搜索)、KMP/Boyer-Moore/Rabin-Karp/Sunday/Z 函数等单模式匹配、Aho-Corasick 多模式匹配、后缀数组(倍增/DC3/SA-IS 线性算法)、后缀自动机(endpos 等价类)、后缀树(Ukkonen 线性算法)以及字符串动态规划(LCS、编辑距离、最长回文)的系统化讲解,覆盖复杂度证明、多语言实现(Python/C++/Java)。
Knuth-Morris-Pratt(KMP)字符串匹配算法:基于模式串自身结构构建部分匹配表(PMT/next 数组),实现 O(n+m) 线性时间匹配。涵盖 Morris 1970、Pratt 1970 独立发现与 Knuth 1970 复杂度证明的演进脉络,Knuth-Morris-Pratt 1977《Fast Pattern Matching in Strings》SIAM J. Comp. 6(2):323-350 DOI:10.1137/0206024 系统化发表;Cook 1971 字符串匹配下界、Aho-Corasick 1975 多模式扩展、Boyer-Moore 1977、Rabin-Karp 1987、Sunday 1990 变种对比;KMP 在 GNU grep、ESLint、IDE 语法检查、生物信息学 read 比对、Linux 内核字符串搜索中的应用;附 Python/C++/Java 多语言实现与 KMP 自动机、AC 自动机扩展。
线段树数据结构的形式化定义(区间幺半群上的完全二叉树)、懒标记下传语义、构建 O(n)、查询/更新 O(log n)、空间 O(4n) 的复杂度证明,覆盖递归/迭代实现、动态开点、离散化、持久化、合并线段树、李超树、扫描线等工程变体,附多语言实现。
树状数组(Fenwick Tree / Binary Indexed Tree, BIT)的形式化定义(基于二进制分解的前缀和索引结构)、lowbit 位运算原理、单点更新 + 区间查询 $O(\log n)$、区间更新 + 单点查询(差分树状数组)、区间更新 + 区间查询(双树状数组)三种模式的形式化推导与复杂度证明,覆盖 Peter M. Fenwick 1994《A New Data Structure for Cumulative Frequency Tables》Software: Practice and Experience 24(3):327-336 DOI:10.1002/spe.4380240306 的历史脉络、lowbit 不变式证明、与线段树 / 平方分解 / 前缀和的对比、Lucene 倒排索引 / Redis Sorted Set / PostgreSQL 统计信息等工业案例,附 Python / C++ / Java 多语言实现。
跳跃表(Skip List)数据结构的形式化定义(多层索引概率结构)、期望 O(log n) 查找/插入/删除的随机化分析、与平衡树的对比、Redis Sorted Set / LevelDB MemTable / Apache Lucene 倒排索引等工程实现,附多语言实现。
布隆过滤器(Bloom Filter):一种空间高效的概率数据结构,由 Burton H. Bloom 1970《Space/Time Trade-offs in Hash Coding with Allowable Errors》Communications of the ACM 13(7):422-426 DOI:10.1145/362686.362692 提出。利用 k 个独立哈希函数将元素映射到 m 位的位数组,实现 O(k) 时间复杂度的成员查询,无假阴性但允许可控假阳性。本章涵盖 Bloom 原始动机、假阳性率 $P = (1 - e^{-kn/m})^k$ 的完整推导、最优哈希函数个数 $k_{\text{opt}} = (m/n)\ln 2$ 的极值分析、Counting Bloom Filter(Fan et al. 1998 USENIX Summary Cache)、Compressed Bloom Filter(Mitzenmacher 2002)、Cuckoo Filter(Fan et al. 2014 ACM TOCT)、Spectral Bloom Filter、Stable Bloom Filter 等变种;对比 Hash Set、Skip List、HyperLogLog、Cuckoo Filter 的空间/时间/精度权衡;附 Python/C++/Java 三语言实现、工业级应用(Cassandra、HBase、PostgreSQL、Chrome、Bitcoin SPV、Squid Proxy、Bigtable)。
计算复杂性理论的核心体系:以 Turing 1936《On Computable Numbers, with an Application to the Entscheidungsproblem》Proc. LMS 42:230-265 图灵机模型与 Church 1936《An Unsolvable Problem of Elementary Number Theory》Amer. J. Math. 58(2):345-363 λ-演算为根基,梳理 Gödel 1931 不完备性定理、Rice 1953《Classes of Recursively Enumerable Sets and Their Decision Problems》Trans. AMS 74:358-366、Hartmanis-Stearns 1965《On the Computational Complexity of Algorithms》Trans. AMS 117:285-306 复杂性类奠基、Cook 1971《The Complexity of Theorem-Proving Procedures》STOC 151-158 Cook-Levin 定理、Karp 1972《Reducibility Among Combinatorial Problems》21 个 NP 完全问题、Levin 1973《Universal Search Problems》Probl. Peredachi Inf. 9(3):115-116 独立发现、Savitch 1970《Relationships Between Nondeterministic and Deterministic Tape Complexities》JCSS 4(2):177-192、Baker-Gill-Solovay 1975《Relativizations of the P=?NP Question》SICOMP 4(4):431-442 相对化屏障、Ladner 1975《On the Structure of Polynomial Time Reducibility》JACM 22(1):155-171 NP-intermediate、PCP 定理(Arora-Safra 1998《Probabilistic Checking of Proofs》JACM 45(1):70-122;Arora-Lund-Motwani-Sudan-Szegedy 1998 JACM 45(3):501-555;Dinur 2007 组合证明)的完整脉络,覆盖 P/NP/NP-Hard/NP-Complete 形式化定义、多项式归约、摊还分析三方法(Sleator-Tarjan 1985 CACM 28(2):202-208)、竞争分析(Sleator-Tarjan 1985)、在线算法、数据流模型、P vs NP 千禧年大奖问题,附 Python/C++/Java 多语言实现与经典归约链(SAT → 3-SAT → CLIQUE → VERTEX-COVER → HAMILTONIAN-CYCLE → TSP)及 LeetCode 经典题解。
LeetCode 刷题指南系统化阐述在线算法评测平台的发展脉络(ACM ICPC 1970、Google Code Jam 2003-2023、Topcoder Open 2001、Meta Hacker Cup 2011、Codeforces 2009、AtCoder 2012、LeetCode 2015 by Winston Tang、LeetCode China 2018)、十大题型分类体系(数组/双指针、链表、树、图、二分查找、回溯、动态规划、贪心、滑动窗口、单调栈)、三遍刷题法与四步解题法、时间复杂度反推($n \leq 20 \to O(2^n)$、$n \leq 100 \to O(n^3)$、$n \leq 10^4 \to O(n^2)$、$n \leq 10^6 \to O(n \log n)$、$n \leq 10^9 \to O(\log n)$)、高频题解模板(Python/C++/Java 三语言实现)、LeetCode Hot 100/Top Interview 150/Grind 75/NeetCode 150 学习路径对比、FAANG 与字节跳动/腾讯/阿里巴巴面试风格分析、LeetCode 题目到工业应用的映射(LRU Cache → Redis 淘汰策略、并查集 → Kubernetes 网络、单调栈 → Prometheus 监控)、LeetCode/LintCode/HackerRank/CodeSignal/牛客网五大平台对比。覆盖 100+ 经典题目索引(LC-1/11/15/42/72/200/300/1143 等),含 Bloom 分类法学习目标、ACM 格式参考文献(含 DOI)。
Remove Element
原地删除数组中所有等于 val 的元素,返回新长度。
Remove Duplicates from Sorted Array
原地删除有序数组的重复项,使每个元素只出现一次。
Merge Sorted Array
把两个有序数组合并进 nums1 的剩余空间,保持有序。
Rotate Array
将数组向右轮转 k 个位置,要求 O(1) 额外空间。
Majority Element
找出数组中出现次数超过一半的元素。
Container With Most Water
两条竖线与 x 轴围成的容器,求能容纳的最大水量。
3Sum
找出数组中所有和为 0 且不重复的三元组。
Trapping Rain Water
给定柱子高度,计算下雨后能接多少水。
Minimum Size Subarray Sum
找和大于等于 target 的最短连续子数组长度。
Longest Substring Without Repeating Characters
求不含重复字符的最长子串的长度。
Minimum Window Substring
在 s 中找出包含 t 所有字符的最小子串。
Find All Anagrams in a String
找出 s 中所有 p 的异位词子串的起始下标。
Subarray Sum Equals K
统计数组中和恰好为 k 的连续子数组个数。
Sliding Window Maximum
返回每个长度为 k 的滑动窗口中的最大值。
Binary Search
在升序数组中查找目标值的下标。
Find First and Last Position of Element in Sorted Array
在非递减数组中找出目标值的开始与结束位置。
Search in Rotated Sorted Array
在旋转过的升序数组中查找目标值。
Find Minimum in Rotated Sorted Array
找出旋转后升序数组中的最小元素。
Find Peak Element
找出数组中的峰值元素(大于相邻元素)下标。
Median of Two Sorted Arrays
O(log(m+n)) 求两个有序数组合并后的中位数。
Two Sum
在数组中找出和为目标值的两个数的下标。
Group Anagrams
把字母异位词组合在一起分组返回。
Longest Consecutive Sequence
O(n) 求未排序数组中最长连续数字序列的长度。
First Missing Positive
O(n) 时间 O(1) 空间找出未排序数组中缺失的最小正整数。
Insert Delete GetRandom O(1)
设计支持均摊 O(1) 插入、删除与等概率随机获取的数据结构。
Reverse Linked List
反转单链表并返回新头节点。
Merge Two Sorted Lists
将两个升序链表合并为一个升序链表。
Linked List Cycle
判断链表中是否存在环。
Linked List Cycle II
找出环的入口节点。
Remove Nth Node From End of List
一趟扫描删除链表倒数第 n 个节点。
Intersection of Two Linked Lists
找到两个单链表相交的起始节点。
Reorder List
将链表重排为 L0 -> Ln -> L1 -> Ln-1 的交错序列。
Reverse Nodes in k-Group
每 k 个节点一组进行翻转,不足 k 个保持原序。
Valid Parentheses
判断括号字符串是否完全闭合匹配。
Min Stack
设计支持 O(1) 获取最小值的栈。
Implement Queue using Stacks
仅用两个栈实现队列的先进先出操作。
Daily Temperatures
求每天等到下一个更暖天气所需等待的天数。
Next Greater Element II
循环数组中找每个元素的下一个更大元素。
Largest Rectangle in Histogram
求柱状图中能勾勒出的最大矩形面积。
Decode String
解码形如 k[encoded_string] 的编码字符串。
Longest Common Prefix
查找字符串数组中的最长公共前缀。
Find the Index of the First Occurrence in a String
返回模式串 needle 在文本串 haystack 中首次出现的下标。
Reverse Words in a String
反转单词顺序并压缩多余空格。
Add Strings
模拟手算加法,求两个非负整数字符串的和。
Zigzag Conversion
把字符串按 Z 字形排布后逐行读取。
Maximum Depth of Binary Tree
求二叉树根到最远叶子节点的最长路径上的节点数。
Invert Binary Tree
将二叉树左右子树互换得到镜像。
Symmetric Tree
判断二叉树是否轴对称。
Binary Tree Level Order Traversal
按层返回二叉树节点值。
Construct Binary Tree from Preorder and Inorder Traversal
根据前序与中序遍历结果重建二叉树。
Lowest Common Ancestor of a Binary Tree
找出二叉树中两个指定节点的最近公共祖先。
Validate Binary Search Tree
判断给定的树是否为合法的二叉搜索树。
Binary Tree Maximum Path Sum
求二叉树中任意路径(不重复经过节点)的最大和。
Kth Largest Element in an Array
不用排序找出数组中第 k 大的元素。
Top K Frequent Elements
返回出现频率前 k 高的元素。
Merge k Sorted Lists
将 k 个升序链表合并成一个升序链表。
Find Median from Data Stream
动态添加整数,随时查询当前所有数的中位数。
Subsets
返回数组所有可能的子集(幂集)。
Permutations
返回不含重复数字的数组的全部排列。
Combinations
返回 [1, n] 中所有 k 个数的组合。
Combination Sum
找出 candidates 中和为 target 的所有组合(数字可重复选)。
Generate Parentheses
生成所有由 n 对括号组成的合法组合。
Word Search
判断网格中是否存在一条按序连成给定单词的路径。
N-Queens
把 n 个皇后摆到 n x n 棋盘上使其互不攻击,返回所有方案。
Best Time to Buy and Sell Stock
一次买卖(先买后卖)所能获取的最大利润。
Jump Game
判断能否从数组起点跳到最后一格。
Jump Game II
求跳到数组末尾的最少跳跃次数。
Merge Intervals
合并所有存在重叠的区间。
Non-overlapping Intervals
求最少移除多少个区间可使剩余区间互不重叠。
Minimum Number of Arrows to Burst Balloons
沿 x 轴射箭引爆所有气球,求最少箭数。
LRU Cache
设计容量受限、淘汰最久未使用的缓存结构。
Single Number
找出只出现一次的元素,其余元素均出现两次。
Number of 1 Bits
统计无符号整数的二进制表示中 1 的个数。
Counting Bits
O(n) 求出 0 到 n 每个数的二进制 1 的个数。
Pow(x, n)
实现 x 的 n 次幂(n 可为负),要求 O(log |n|)。
Climbing Stairs
每次爬 1 或 2 阶,求爬到 n 阶的不同方法数。
Maximum Subarray
找出具有最大和的连续子数组并返回其和。
House Robber
沿街房屋不能偷相邻两家,求能偷到的最高金额。
House Robber II
房屋围成环(首尾相邻),求最高偷窃金额。
Coin Change
凑出 amount 所需的最少硬币数。
Partition Equal Subset Sum
判断数组能否分割成两个元素和相等的子集。
Longest Increasing Subsequence
求严格递增子序列的最大长度。
Longest Common Subsequence
求两个字符串的最长公共子序列长度。
Edit Distance
把一个单词转换成另一个单词所需的最少操作数(增删改)。
Longest Palindromic Substring
返回字符串中最长的回文子串。
Unique Paths
机器人从网格左上角走到右下角的路径总数。
Word Break
判断字符串能否被字典中的单词拼接而成。
Number of Islands
统计由陆地组成的岛屿数量。
Max Area of Island
计算岛屿中陆地格子数的最大值。
Rotting Oranges
求所有新鲜橘子腐烂所需的最少分钟数。
Course Schedule
判断带先修约束的课程安排是否可行(检测有向图是否有环)。
Course Schedule II
返回一个满足先修约束的合法修课顺序。
Clone Graph
深拷贝一个无向连通图。
Number of Provinces
统计邻接矩阵表示的城市网络中有多少个省份。
Network Delay Time
求信号从源节点传播到所有节点的最短时间(最短路的最大值)。
没有匹配的题目
全球规模领先的算法题库,按标签 / 难度 / 企业筛选,在线判题与题解社区完善,站内题图鉴中标注 LC 序号的题目均可在其上提交验证。
leetcode.cn可按公司、岗位、轮次、主题和难度筛选的候选人报告编程面试题,适合在掌握基础模式后按目标公司定向备战。
prachub.com以题型模式(pattern)组织的免费刷题路线与视频讲解,Blind 75 / NeetCode 150 题单是与本站教程搭配的经典进阶路径。
neetcode.io中文算法竞赛社区,官方题单与训练营覆盖入门到 NOIP / ICPC 水平,适合在课程表之后追求更强的实现能力。
luogu.com.cn全球竞技编程赛事与题库,评级赛制驱动持续练习;博客区沉淀顶级选手的技巧分享,是限时训练与进阶阅读的双重阵地。
codeforces.com国内笔试面试题库与模拟面试,覆盖校招高频考点与企业真题,求职季的实战演练场。
nowcoder.com日本竞技编程平台,其 Educational DP Contest 收录 26 道动态规划专项题,从背包到区间 DP 全覆盖,适合作为设计范式单元之后的集中演练。
atcoder.jp新加坡国立大学 Steven Halim 团队打造的交互式可视化库,50 余种算法逐步动画演示,排序、图遍历与数据结构操作可与站内教程对照观看。
visualgo.net开源可视化平台,支持 JavaScript / Python 代码实时执行并同步生成动画,直观呈现每一步的状态变化,适合验证自己写的模板逻辑。
algorithm-visualizer.org旧金山大学 David Galles 制作的交互式演示合集,链表、树、堆、图等经典结构的插入、删除与遍历过程逐帧可操作。
cs.usfca.eduErik Demaine 等主讲的 MIT 经典算法课,Spring 2020 版提供完整视频与习题,覆盖从复杂度分析到高级结构的课程主线。
ocw.mit.eduTim Roughgarden 主讲的算法设计与分析课程,课程讲义比 CLRS 更精炼,适合在刷题之外补足证明与复杂度分析功底。
web.stanford.eduSedgewick 主讲、Coursera 上最经典的算法系列课,配套 Java 实现与编程作业,数据结构部分可与站内树形单元互为印证。
coursera.orgJosh Hug 主讲的 Java 数据结构课程,实现细节与工程视角兼备,是树、堆、图等单元的理想加深材料。
cs61b.orgFAANG 工程师视角的算法讲解频道,侧重"为什么这样解"的思路推导而非代码罗列,适合巩固套路背后的直觉。
youtube.comGoogle 工程师的图论与数据结构系列,从邻接表、并查集一路讲到网络流,与站内图论单元逐节互补。
youtube.com以上为外部第三方平台,其内容、账号与服务均由各自运营方提供;收录仅为学习资源参考,不构成合作或背书,本站不对使用外部资源产生的各类问题承担责任。详见免责声明。