算法题

链表

快慢指针
指针分别指向pre,cur和next进行链表的截断,翻转等
在链表前加个hair指针,指向head,有时更好操作。

141. 环形链表

142. 环形链表 II

202. 快乐数

206. 反转链表

92. 反转链表 II

25. K 个一组翻转链表

61. 旋转链表

19. 删除链表的倒数第 N 个结点

83. 删除排序链表中的重复元素

82. 删除排序链表中的重复元素 II

86. 分隔链表

138. 复制带随机指针的链表

队列

622. 设计循环队列

641. 设计循环双端队列

933. 最近的请求次数

859. 亲密字符串

面试题 17.09. 第 k 个数

969. 煎饼排序

621. 任务调度器

遇见有包含关系时的问题,一个值得考虑的数据结构

20. 有效的括号

227. 基本计算器 II

331. 验证二叉树的前序序列化

636. 函数的独占时间

844. 比较含退格的字符串

946. 验证栈序列

1021. 删除最外层的括号

1124. 表现良好的最长时间段

1249. 移除无效的括号

面试题 03.04. 化栈为队

772. 基本计算器 III

二叉树

前序遍历、中序遍历、后序遍历、层序遍历

144. 二叉树的前序遍历

94. 二叉树的中序遍历

145. 二叉树的后序遍历

589. N 叉树的前序遍历

226. 翻转二叉树

102. 二叉树的层序遍历

107. 二叉树的层序遍历 II

103. 二叉树的锯齿形层序遍历

110. 平衡二叉树

112. 路径总和

105. 从前序与中序遍历序列构造二叉树

222. 完全二叉树的节点个数

剑指 Offer 54. 二叉搜索树的第k大节点

剑指 Offer 26. 树的子结构

662. 二叉树最大宽度

968. 监控二叉树

堆与优先队列

剑指 Offer 40. 最小的k个数

1046. 最后一块石头的重量

1753. 移除石子的最大得分

703. 数据流中的第 K 大元素

215. 数组中的第K个最大元素

264. 丑数 II

313. 超级丑数

面试题 17.20. 连续中值

295. 数据流的中位数

692. 前K个高频单词

373. 查找和最小的 K 对数字

1801. 积压订单中的订单总数

355. 设计推特

前缀和

303. 区域和检索 - 数组不可变

304. 二维区域和检索 - 矩阵不可变

560. 和为 K 的子数组

差分数组

滑动窗口

76. 最小覆盖子串

567. 字符串的排列

438. 找到字符串中所有字母异位词

3. 无重复字符的最长子串

回溯算法

类似于暴力求解,尝试种种可能的选择获得符合条件的结果。
核心是在递归调用之前做选择,在递归调用之后撤销选择。
快速创建一个二维数组:

Array.from(new Array(n),()=>new Array(n).fill('.')) 

46. 全排列

51. N 皇后

698. 划分为k个相等的子集

动态规划

动态规划问题的一般形式就是求最值,存在重叠子问题,可以通过之前的状态推出当前的状态,避免不必要的计算。
动态规划的核心就是找到状态转移方程。

509. 斐波那契数)

322. 零钱兑换)

300. 最长递增子序列

53. 最大子序和

931. 下降路径最小和

1143. 最长公共子序列

583. 两个字符串的删除操作

712. 两个字符串的最小ASCII删除和

494. 目标和

LRU和LFU

146. LRU 缓存

460. LFU 缓存

未完待续

你可能感兴趣的:(算法题)