写在前面
- 常见算法模板(自己总结,非官方)
数据结构
数组
- 26. 删除排序数组中的重复项
- 66. 加一
- 88. 合并两个有序数组
- 122. 买卖股票的最佳时机
- 455. 分发饼干
- ✨189. 旋转数组
- ✨264. 丑数-ii
- 874. 模拟行走机器人
- 5. 最长回文子串
- 66. 加一
- 118. 杨辉三角
- 135. 分发糖果
- 198. 打家劫舍
- 204. 计数质数
- 290. 单词规律
- 330. 按要求补充数组
- 435. 无重叠区间
- 452. 用最少数量的箭引爆气球
- 659. 分割数组为连续子序列
- 738. 单调递增的数字
- 746. 使用最小花费爬楼梯
- 861. 翻转矩阵后的得分
- 976. 三角形的最大周长
链表
栈
队列
Hash
- 1. 两数之和
- 49. 字母异位词分组
- 169. 多数元素
- 242. 有效的字母异位词
- 860. 柠檬水找零
- 217. 存在重复元素
- 387. 字符串中的第一个唯一字符
- 389. 找不同
- 767. 重构字符串
滑动窗口
1 | function(s, t) { |
树
- 21. 合并两个有序链表
- 24. 两两交换链表中的节点
- 💉25. k个一组翻转链表
- 💉92. 反转链表-ii
- 100. 相同的树
- 222. 完全二叉树的节点个数
- 700. 二叉搜索树中的搜索
- 701. 二叉搜索树中的插入操作
- ✨652. 寻找重复的子树
- ✨230. 二叉搜索树中的第k小的元素
- ✨538. 把二叉搜索树转换成累加树
- ✨297. 二叉树的序列化与反序列化
- ✨226. 翻转二叉树
- ✨116. 填充每个节点的下一个右侧节点指针
- ✨98. 验证二叉搜索树
- ✨112. 路经总和
- ✨104. 二叉树的最大深度
- ✨111. 二叉树的最小深度
- ✨450. 删除二叉搜索树中的节点
- ✨105. 从前序与中序遍历序列构造二叉树
- ✨106. 从中序与后序遍历序列构造二叉树
- ✨236. 二叉树的最近公共祖先
- 🤔️114. 二叉树展开为链表
- ✨144. 二叉树的前序遍历
- ✨94. 二叉树的中序遍历
- ✨145. 二叉树的后序遍历
- ✨102. 二叉树的层序遍历
- ✨589. N叉树的前序遍历
- ✨590. N叉树的后序遍历
- ✨429. N叉树的层序遍历
- 654. 最大二叉树
前缀和
单调栈
1 | // 84. 柱状图中最大的矩形 |
双指针
1 | let max = 0; |
双指针暴力
1 | var largestRectangleArea = function(heights) { |
递归
1 | function recursion(level, param1, param2, ...) { |
分治
1 | function divideConquer(problem, param1, param2, ... ) { |
DFS + 回溯
tips: 基础类型不能代入到参数列表中,不会被改变
深度优先搜索
1 | function dfs(node) { |
DFS 代码 - 递归写法
1 | const visited = new Set; |
DFS 代码 - 非递归写法
1 | function dfs(root) { |
BFS
1 | function BFS(graph, start, end) { |
二分查找
1 | let left = 0, right = arr.length - 1; |
组合
1 | var combine = function (n, k) { |
排列
1 | var permute = function(nums) { |
1 |
|
动态规划
- ✨300. 最长上升子序列
- ✨322 零钱兑换
- 32. 最长有效括号
- 53. 最大子序和
- 62. 不同路径
- 72. 编辑距离
- 91. 解码方法
- 121. 买卖股票的最佳时机
- 122. 买卖股票的最佳时机-ii
- 123. 买卖股票的最佳时机-iii
- 188. 买票股票的最佳时机-iv
- 309. 最佳买卖股票时机含冷冻期
- 714. 买卖股票的最佳时机含手续费
- 213. 打家劫舍
- 322. 零钱兑换
- 518. 零钱兑换-ii
- 337. 打家劫舍-iii
- 376. 摆动序列
- 416. 分割等和子集
- 509. 斐波那契数列
- 516. 最长回文子序列
- 1143. 最长公共子序列
博弈论
写在后面
- 最新更新 2020-12-29