题目列表

可按标题、OJ、标签和启发记录快速筛选题目解析。

共 3718 题
OJ题号标题标签难度最后更新解析
力扣next-permutation
从右找下降点,找最小更大后继交换,反转后缀。
技巧排列
普及+/提高-2026-07-29 15:20
力扣sort-colors
三指针荷兰国旗:p0 指向 0 的右界,p2 指向 2 的左界,扫描指针交换后分类推进。
双指针排序
普及+/提高-2026-07-29 15:20
力扣majority-element
Boyer-Moore 投票:计数器抵消非多数元素,最终留下的候选即为多数。
技巧投票算法
普及-2026-07-29 15:20
力扣single-number
异或所有元素,成对元素异或为 0,最终结果即为只出现一次的数。
位运算技巧
入门2026-07-29 15:20
力扣edit-distance
二维 DP:插入、删除、替换分别对应三个相邻状态转移,取最小值。
动态规划字符串
提高+/省选-2026-07-29 15:20
力扣longest-common-subsequence
二维 DP:字符相等时 dp[i][j]=dp[i-1][j-1]+1,不等时取 max(dp[i-1][j], dp[i][j-1])。
动态规划字符串
普及+/提高-2026-07-29 15:20
力扣longest-palindromic-substring
中心扩展:枚举每个中心(奇偶),向两侧扩展直到不回文,记录最长。
字符串动态规划
普及+/提高-2026-07-29 15:20
力扣minimum-path-sum
网格 DP:边界只能来自单方向,内部取上左较小值加上当前格。
动态规划网格
普及-2026-07-29 15:20
力扣unique-paths
网格 DP:首行首列初始化为 1,内部 dp[j] += dp[j-1] 即上方加左方。
动态规划组合数学
普及-2026-07-29 15:20
力扣longest-valid-parentheses
栈保存未匹配位置,弹出后用栈顶计算有效长度,栈空时压入当前右括号作为新边界。
栈动态规划字符串
提高+/省选-2026-07-29 15:20
力扣partition-equal-subset-sum
0/1 背包判断能否凑满 sum/2,倒序更新避免重复使用元素。
动态规划0/1背包
普及+/提高-2026-07-29 15:20
力扣maximum-product-subarray
同时维护以当前位置结尾的最大和最小乘积,负数交换两者,取全局最大。
动态规划
普及+/提高-2026-07-29 15:20
力扣longest-increasing-subsequence
贪心+二分:tails 数组维护各长度子序列的最小结尾,lower_bound 更新保证严格递增。
动态规划二分查找贪心
普及+/提高-2026-07-29 15:20
力扣word-break
dp[i] 表示前 i 个字符是否可拆分,枚举断点 j,若 dp[j] 且 s[j:i] 在字典中则 dp[i]=true。
动态规划字符串
普及+/提高-2026-07-29 15:20
力扣coin-change
完全背包 DP:dp[i] 从所有硬币面额转移,取最小值,不可达用哨兵标记。
动态规划完全背包
普及+/提高-2026-07-29 15:20
力扣house-robber
dp[i] 表示处理到第 i 间时的最大金额,偷当前则跳过前一间,不偷则继承前一间。
动态规划递推
普及-2026-07-29 15:20
力扣pascals-triangle
边界恒为 1,内部由上一行相邻两数相加,逐行递推生成。
动态规划递推
入门2026-07-29 15:20
力扣climbing-stairs
Fibonacci 型递推:dp[i] = dp[i-1] + dp[i-2],初值 dp[1]=1, dp[2]=2。
动态规划递推
入门2026-07-29 15:20
力扣partition-labels
预处理每个字母最后出现位置,扫描时扩展当前段边界至段内所有字母最远末次位置,到达时切分。
贪心字符串
普及+/提高-2026-07-29 15:20
力扣jump-game-ii
BFS 层次遍历思想:当前层边界与下一层最远位置确定跳跃次数。
贪心数组
普及+/提高-2026-07-29 15:20
力扣jump-game
维护最远可达位置,扫描时不断扩展,若中途无法前进则不可达。
贪心数组
普及2026-07-29 15:20
力扣best-time-to-buy-and-sell-stock
扫描时只用此前最低价计算今天卖出的收益,取最大值。
贪心数组
普及-2026-07-29 15:20
力扣find-median-from-data-stream
两个堆维护数据流:大顶堆存较小半,小顶堆存较大半,堆顶即为中位数候选。
堆优先队列数据结构
提高+/省选-2026-07-29 15:20
力扣top-k-frequent-elements
统计频次后排序取前 k,或用大小为 k 的最小堆保留频次最高的 k 个。
堆排序哈希表
普及+/提高-2026-07-29 15:20
力扣kth-largest-element-in-an-array
维护大小为 k 的最小堆,堆顶即为第 k 大元素。
堆优先队列排序
普及+/提高-2026-07-29 15:20
力扣daily-temperatures
单调栈保存尚未遇到更高温度的下标,弹出时计算距离即为等待天数。
单调栈栈
普及+/提高-2026-07-29 15:20
力扣decode-string
遇到 [ 时保存当前字符串和次数到栈,遇到 ] 时弹出并拼接重复结果,处理嵌套编码。
栈字符串
普及+/提高-2026-07-29 15:20
力扣min-stack
每个元素同时保存当前值和截至该层的最小值,getMin 直接读栈顶的 min 字段。
栈数据结构
普及-2026-07-29 15:20
力扣valid-parentheses
栈匹配:左括号入栈,右括号必须与栈顶严格配对,最终栈空则合法。
栈字符串
入门2026-07-29 15:20
力扣median-of-two-sorted-arrays
在较短数组上二分分割线,满足左半最大 ≤ 右半最小,由四个边界值计算中位数。
二分查找数组
提高+/省选-2026-07-29 15:20
力扣find-minimum-in-rotated-sorted-array
比较中点与右端点,保留最小值所在闭区间,最终 l 指向最小元素。
二分查找数组
普及+/提高-2026-07-29 15:20
力扣search-in-rotated-sorted-array
每轮二分判断哪一半有序,再判断 target 是否落在该半区,缩小搜索范围。
二分查找数组
普及+/提高-2026-07-29 15:20
力扣search-a-2d-matrix
把二维下标映射到一维有序序列,一次二分查找 target。
二分查找矩阵
普及-2026-07-29 15:20
力扣add-two-numbers
同步遍历两链表和进位,节点值写 sum % 10,末尾保留 carry。
链表数学递归cpppython
普及+/提高-2026-07-29 15:20
力扣binary-tree-inorder-traversal
左根右;递归或显式栈模拟递归。
二叉树栈递归cpppython
入门2026-07-29 15:20
力扣copy-list-with-random-pointer
哈希表映射旧节点到新节点,第二遍补 next/random 引用。
链表哈希表cpppython
普及+/提高-2026-07-29 15:20
力扣diameter-of-binary-tree
后序返回高度,经过当前点的候选为 left+right,全局取最大。
二叉树递归树形DPcpppython
入门2026-07-29 15:20
力扣first-missing-positive
把值 x 放到下标 x-1,最后第一个 a[i] != i+1 即答案,O(n) 时间 O(1) 空间。
数组哈希表cpppython
提高+/省选-2026-07-29 15:20
力扣intersection-of-two-linked-lists
双指针分别走 A+B 和 B+A,长度差被抵消后在交点或 nullptr 相遇。
链表双指针哈希表cpppython
入门2026-07-29 15:20
力扣invert-binary-tree
后序/前序递归交换左右子树。
二叉树递归cpppython
入门2026-07-29 15:20
力扣linked-list-cycle-ii
Floyd 判环后,从头和相遇点各走一步,第二次相遇即入环点。
链表双指针哈希表cpppython
普及+/提高-2026-07-29 15:20
力扣linked-list-cycle
Floyd 快慢指针,slow 走一步 fast 走两步,相遇则有环。
链表双指针哈希表cpppython
入门2026-07-29 15:20
力扣lru-cache
哈希表 O(1) 找节点,双向链表按最近使用顺序维护,头为新、尾为旧。
设计哈希表链表cpppython
普及+/提高-2026-07-29 15:20
力扣maximum-depth-of-binary-tree
1 + max(left, right) 递归。
二叉树递归BFScpppython
入门2026-07-29 15:20
力扣maximum-subarray
Kadane 算法:以 i 结尾的最大和 = max(a[i], dp[i-1] + a[i]),滚动 O(1) 空间。
数组动态规划分治cpppython
普及+/提高-2026-07-29 15:20
力扣merge-intervals
按左端点排序,遍历时维护当前合并区间,相交则扩右端,否则输出并重开。
数组排序cpppython
普及+/提高-2026-07-29 15:20
力扣merge-k-sorted-lists
小根堆维护每条链当前头节点,每次弹出后推进,O(N log K)。
链表堆分治cpppython
提高+/省选-2026-07-29 15:20
力扣merge-two-sorted-lists
dummy 头结点,每次接入较小节点,最后接剩余链。
链表递归cpppython
入门2026-07-29 15:20
力扣palindrome-linked-list
快慢指针找中点,反转后半段,与前半段比较,O(n) O(1)。
链表双指针栈cpppython
入门2026-07-29 15:20
力扣product-of-array-except-self
结果先存左侧前缀积,再乘右侧后缀积,O(n) 时间 O(1) 额外空间。
数组前缀和cpppython
普及+/提高-2026-07-29 15:20
力扣remove-nth-node-from-end-of-list
dummy + 快慢指针相距 n+1,快指针到尾时慢指针在待删节点前一位。
链表双指针cpppython
普及+/提高-2026-07-29 15:20
力扣reverse-linked-list
prev/cur/next 三指针逐节点反转,同时保留后续节点引用。
链表递归cpppython
入门2026-07-29 15:20
力扣reverse-nodes-in-k-group
先找第 k 个节点,翻转这一段并接回;不足 k 段保持原样。
链表递归cpppython
提高+/省选-2026-07-29 15:20
力扣rotate-array
三次反转:整体反转,再分别反转前 k 和后 n-k;先取 k %= n。
数组数学双指针cpppython
普及+/提高-2026-07-29 15:20
力扣rotate-image
先沿主对角线转置,再逐行反转;原地旋转 90 度顺时针,O(n²) O(1)。
数组矩阵cpppython
普及+/提高-2026-07-29 15:20
力扣search-a-2d-matrix-ii
从右上角出发,小于 target 向下,大于 target 向左,每步排除一行或一列,O(m+n)。
数组二分查找分治矩阵cpppython
普及+/提高-2026-07-29 15:20
力扣set-matrix-zeroes
用首行/首列充当标记位,先记录首行首列是否含零,再标记并回填,O(1) 额外空间。
数组矩阵cpppython
普及+/提高-2026-07-29 15:20
力扣sort-list
快慢指针拆半,递归归并排序,O(n log n) 时间 O(log n) 递归空间。
链表排序归并排序cpppython
普及+/提高-2026-07-29 15:20
力扣spiral-matrix
维护 top/bottom/left/right 四条边,按右/下/左/上收缩并检查边界,避免单行/单列重复。
数组矩阵模拟cpppython
普及+/提高-2026-07-29 15:20
力扣swap-nodes-in-pairs
dummy + prev/a/b/next 四指针每轮重连已交换段和待处理段。
链表递归cpppython
普及+/提高-2026-07-29 15:20