https://programmercarl.com/

数组

  • 704. 二分查找(二分查找)
    • 35. 搜索插入位置
    • 34. 在排序数组中查找元素的第一个和最后一个位置[[1. 数组#34. 在排序数组中查找元素的第一个和最后一个位置]]
    • 69. x 的平方根[[1. 数组#69. x 的平方根]]
    • 367. 有效的完全平方数
  • 27. 移除元素(双指针)
    • 26. 删除排序数组中的重复项
    • 283. 移动零
    • 844. 比较含退格的字符串
  • 977. 有序数组的平方[[1. 数组#977. 有序数组的平方]](双指针)
  • 209. 长度最小的子数组(滑动窗口)
    • 904.水果成篮
    • 76.最小覆盖子串[[1. 数组#76. 最小覆盖子串]]
  • 59. 螺旋矩阵 II(模拟)
    • 54. 螺旋矩阵

链表

  • 203. 移除链表元素(节点删除)
  • 707. 设计链表
  • 206. 翻转链表[[2. 链表#206. 反转链表]]
  • 24. 两两交换链表中的节点
  • 19. 删除链表的倒数第 N 个节点
  • 面试题 02.07. 链表相交
  • 142. 环形链表 II

哈希表

  • 242. 有效的字母异位词[[3. 哈希表#242. 有效的字母异位词]]
    • 383. 赎金信
    • 49. 字母异位词分组[[3. 哈希表#49. 字母异位词分组]]
    • 438. 找到字符串中所有字母异位词[[3. 哈希表#438. 找到字符串中所有字母异位词]]
  • 349. 两个数组的交集
    • 350. 两个数组的交集 II
  • 202. 快乐数[[3. 哈希表#202. 快乐数]]
  • 1. 两数之和
  • 454. 四数相加 II
  • 15. 三数之和[[3. 哈希表#15. 三数之和]]
  • 18. 四数之和

字符串

  • 344. 反转字符串
  • 541. 反转字符串 II
  • 151. 翻转字符串里的单词
  • 189. 轮转数组[[4. 字符串#189. 轮转数组]]
  • 28. 实现 strStr()[[4. 字符串#28. 实现 strStr()]]
  • 459. 重复的子字符串[[4. 字符串#459. 重复的子字符串]]

栈与队列

  • 232. 用栈实现队列
  • 225. 用队列实现栈
  • 20. 有效的括号
  • 1047. 删除字符串中的所有相邻重复项
  • 150. 逆波兰表达式求值
  • 239. 滑动窗口最大值
  • 347. 前 K 个高频元素[[5. 栈与队列#347. 前 K 个高频元素]]

二叉树(1)

  • 144. 二叉树的前序遍历[[6. 二叉树(1)#144. 二叉树的前序遍历]]
  • 145. 二叉树的后序遍历[[6. 二叉树(1)#145. 二叉树的后序遍历]]
  • (!!!)94. 二叉树的中序遍历[[6. 二叉树(1)#94. 二叉树的中序遍历]]
  • 102. 二叉树的层序遍历[[6. 二叉树(1)#102. 二叉树的层序遍历]]
    • 107. 二叉树的层次遍历 II
    • 199. 二叉树的右视图
    • 637. 二叉树的层平均值
    • 429. N 叉树的层序遍历
    • 515. 在每个树行中找最大值
    • 116. 填充每个节点的下一个右侧节点指针
    • 117. 填充每个节点的下一个右侧节点指针 II
    • 104. 二叉树的最大深度
    • 111. 二叉树的最小深度
    • 559. n 叉树的最大深度

二叉树(2)

  • 226. 翻转二叉树
  • (!)101. 对称二叉树
    • 100. 相同的树
    • (!)572. 另一个树的子树[[7. 二叉树(2)#572. 另一个树的子树]]
  • 222. 完全二叉树的节点个数[[7. 二叉树(2)#222. 完全二叉树的节点个数]]
  • 110. 平衡二叉树
  • 257. 二叉树的所有路径
  • 404. 左叶子之和
  • 513. 找树左下角的值[[7. 二叉树(2)#513. 找树左下角的值]]
  • 112. 路径总和
    • 113. 路径总和 II[[7. 二叉树(2)#113. 路径总和 II]]
  • 106. 从中序与后序遍历序列构造二叉树[[7. 二叉树(2)#106. 从中序与后序遍历序列构造二叉树]]
    • 105. 从前序与中序遍历序列构造二叉树
  • 654. 最大二叉树[[7. 二叉树(2)#654. 最大二叉树]]
  • 617. 合并二叉树

二叉树(3)

  • 700. 二叉搜索树中的搜索
  • 98. 验证二叉搜索树[[8. 二叉树(3)#98. 验证二叉搜索树]]
  • 530. 二叉搜索树的最小绝对差
  • 501. 二叉搜索树中的众数
  • (!)236. 二叉树的最近公共祖先[[8. 二叉树(3)#236. 二叉树的最近公共祖先]]
  • 235. 二叉搜索树的最近公共祖先
  • 701. 二叉搜索树中的插入操作
  • 450. 删除二叉搜索树中的节点
  • 669. 修剪二叉搜索树
  • 108. 将有序数组转换为二叉搜索树
  • 538. 把二叉搜索树转换为累加树

回溯算法

  • 77. 组合[[9. 回溯算法#77. 组合]]
  • 216. 组合总和 III
  • 17. 电话号码的字母组合
  • 39. 组合总和
  • 40. 组合总和 II
  • 131. 分割回文串[[9. 回溯算法#131. 分割回文串]]
  • 93. 复原 IP 地址
  • 78. 子集
  • 90. 子集 II[[9. 回溯算法#90. 子集 II]]
  • (!!)491. 递增子序列[[9. 回溯算法#491. 递增子序列]]
  • 46. 全排列
  • 47. 全排列 II
  • 332. 重新安排行程[[9. 回溯算法#332. 重新安排行程]]
  • 51. N 皇后[[9. 回溯算法#51. N 皇后]]
  • 37. 解数独

贪心算法(1)

  • 455. 分发饼干
  • 376. 摆动序列[[10. 贪心算法(1)#376. 摆动序列]]
  • 53. 最大子序和[[10. 贪心算法(1)#53. 最大子序和]]
  • 122. 买卖股票的最佳时机 II
  • 55. 跳跃游戏
  • 45. 跳跃游戏 II[[10. 贪心算法(1)#45. 跳跃游戏 II]]
  • 1005. K 次取反后最大化的数组和[[10. 贪心算法(1)#1005. K 次取反后最大化的数组和]]
  • (!!!)134. 加油站[[10. 贪心算法(1)#134. 加油站]]

贪心算法(2)

  • (!)135. 分发糖果[[11. 贪心算法(2)#135. 分发糖果]]
  • 860. 柠檬水找零
  • 406. 根据身高重建队列
  • 452. 用最少数量的箭引爆气球[[11. 贪心算法(2)#452. 用最少数量的箭引爆气球]]
  • (!!)435. 无重叠区间[[11. 贪心算法(2)#435. 无重叠区间]]
  • 763. 划分字母区间
  • 56. 合并区间
  • (!)738. 单调递增的数字[[11. 贪心算法(2)#738. 单调递增的数字]]
  • 968. 监控二叉树[[11. 贪心算法(2)#968. 监控二叉树]]

单调栈

  • 739. 每日温度
  • 496. 下一个更大元素 I
  • 503. 下一个更大元素 II
  • (!)42. 接雨水[[12. 单调栈#42. 接雨水]]
  • (!!)84. 柱状图中最大的矩形[[12. 单调栈#84. 柱状图中最大的矩形]]

动态规划(1)

  • 509. 斐波那契数
  • 70. 爬楼梯
  • 746. 使用最小花费爬楼梯
  • 62. 不同路径
  • 63. 不同路径 II
  • 343. 整数拆分[[13. 动态规划(1)#343. 整数拆分]]
  • 96. 不同的二叉搜索树

动态规划(2)

  • 416. 分割等和子集
  • 1049. 最后一块石头的重量 II
  • 494. 目标和[[14. 动态规划(2)#494. 目标和]]
  • 474. 一和零
  • 518. 零钱兑换 II
  • (!!)377. 组合总和 IV[[14. 动态规划(2)#377. 组合总和 IV]]
  • 70. 爬楼梯(进阶版)
  • 322. 零钱兑换
  • 279. 完全平方数
  • 139. 单词拆分[[14. 动态规划(2)#139. 单词拆分]]

动态规划(3)

  • 198. 打家劫舍
  • 213. 打家劫舍 II[[15. 动态规划(3)#213. 打家劫舍 II]]
  • (!)337. 打家劫舍 III[[15. 动态规划(3)#337. 打家劫舍 III]]
  • 121. 买卖股票的最佳时机
  • 122. 买卖股票的最佳时机 II
  • 123. 买卖股票的最佳时机 III
  • 188. 买卖股票的最佳时机 IV[[15. 动态规划(3)#188. 买卖股票的最佳时机 IV]]
  • 309. 最佳买卖股票时机含冷冻期
  • 714. 买卖股票的最佳时机含手续费[[15. 动态规划(3)#714. 买卖股票的最佳时机含手续费]]

动态规划(4)

  • (!!)300. 最长上升子序列[[16. 动态规划(4)#300. 最长上升子序列]]
  • 1143. 最长公共子序列
  • 1035. 不相交的线
  • 674. 最长连续递增序列
  • (!)718. 最长重复子数组[[16. 动态规划(4)#718. 最长重复子数组]]
  • 53. 最大子序和
  • 392. 判断子序列
  • 115. 不同的子序列
  • 583. 两个字符串的删除操作
  • 72. 编辑距离
  • 647. 回文子串[[16. 动态规划(4)#647. 回文子串]]
  • 516. 最长回文子序列

图论(1)

  • 797. 所有可能的路径
  • 200. 岛屿数量
  • 695. 岛屿的最大面积
  • 1020. 飞地的数量
  • 130. 被围绕的区域[[17. 图论(1)#130. 被围绕的区域]]
  • 417. 太平洋大西洋水流问题[[17. 图论(1)#417. 太平洋大西洋水流问题]]
  • 827. 最大人工岛

图论(2)

  • 127. 单词接龙[[18. 图论(2)#127. 单词接龙]]
  • 841. 钥匙和房间[[18. 图论(2)#841. 钥匙和房间]]
  • 463. 岛屿的周长
  • 1971. 寻找图中是否存在路径
  • 684. 冗余连接
  • 685. 冗余连接 II[[18. 图论(2)#685. 冗余连接 II]]

图论(3)

  • 1584. 连接所有点的最小费用
  • 207. 课程表
    • 210. 课程表 II
  • 743. 网络延迟时间
  • 1334. 阈值距离内邻居最少的城市
    • 787. Cheapest Flights Within K Stops
    • 1514. Path with Maximum Probability
    • 1368. Minimum Cost to Make at Least One Valid Path in a Grid
    • 499. The Maze III
    • 1631. Path With Minimum Effort
    • 882. Reachable Nodes In Subdivided Graph
    • 1786. Number of Restricted Paths From First to Last Node
    • 505. The Maze II

额外题目

  • 1365. 数组:有多少小于当前数字的数字
  • 941. 数组:有效的山脉数组
  • 1207. 数组:独一无二的出现次数
  • 724. 数组:寻找数组的中心索引
  • 922. 数组:按奇偶排序数组 II
  • 234. 链表:回文链表
  • 143. 链表:重排链表
  • 141. 链表:环形链表
  • 205. 哈希表:同构字符串
  • 1002. 哈希表:查找常用字符
  • 925. 字符串:长按键入
  • 129. 二叉树:求根到叶子节点数字之和
  • 1382. 二叉树:将二叉搜索树变平衡
  • 52. 回溯算法:N 皇后 II
  • 649. 贪心:Dota2 参议院
  • 1221. 贪心:分割平衡字符串
  • 5. 动态规划:最长回文子串
  • 132. 动态规划:分割回文串 II
  • 673. 动态规划:最长递增子序列的个数
  • 657. 模拟:机器人能否返回原点
  • 31. 模拟:下一个排列
  • 1356. 位运算:根据数字二进制下 1 的数目排序