面试手撕算法100题(更新中)
数组
- 合并两个有序数组
- 搜索二维矩阵II
- 螺旋矩阵
- 旋转图像
链表
- 反转链表
- K个一组翻转链表
- 环形链表
- 合并两个有序链表
- 相交链表
- 反转链表II
- 合并K个排序链表
- 环形链表II
- 重排链表
- 链表中倒数第K个节点
- 删除链表的倒数第N个节点
- 删除链表中的重复元素II
- 两数相加
- 排序链表
- 回文链表
- 删除排序链表中的重复元素
- 复制带随机指针的链表
- 两两交换链表中的节点
二叉树
1. 遍历
- 二叉树的前序遍历
- 二叉树的中序遍历
- 二叉树的后序遍历
- 二叉树的层序遍历
- 二叉树的锯齿形层序遍历
- 二叉树的右视图
2. 二叉搜索树
- 验证二叉搜索树
- 二叉搜索树的第K大节点
- 将二叉搜索树转化为排序的双向链表
3. 求深度
- 二叉树的最大深度
- 平衡二叉树
4. 求直径
- 二叉树的直径
5. 对称
- 对称二叉树
6. 翻转
- 翻转二叉树
7. 最近公共祖先
- 二叉树的最近公共祖先
8. 路径
- 路径总和
- 二叉树中的最大路径和
9. 重建二叉树
- 从前序与中序遍历序列构造二叉树
栈与队列
- 有效的括号
- 接雨水
- 用栈实现队列
- 用队列实现栈
- 最小栈
- 基本计算器II
哈希表HashMap
- LRU缓存机制
- 两数之和
- 三数之和
- 缺失的第一个正数
- 多数元素
- 最长连续序列
字符串
- 字符串相加
- 字符串转换整数(atoi)
- 翻转字符串里的单词
- 字符串相乘
- 验证IP地址
- 最长公共前缀
- 字符串解码
堆
- 数组中的第K个最大元素
二分查找
- 二分查找
- 搜索旋转排序数组
- Sqrt(x)
- 寻找两个正序数组的中位数
- 在排序数组中查找元素的第一个和最后一个位置
- 寻找旋转排序数组的最小值
- 寻找峰值
排序
- 快速排序
- 归并排序
- 堆排序
- 合并区间
- 最大数
深度优先搜索DFS
- 岛屿数量
- 求根节点到叶节点数字之和
广度优先搜索BFS
- 岛屿最大面积
- 二叉树的完全性检验
位运算
- 只出现一次的数字
双指针
- 下一个排列
- 比较版本号
滑动窗口
- 无重复字符的最长子串
- 最小覆盖子串
- 滑动窗口最大值
回溯法
- 全排列
- 复原IP地址
- 路径总和II
- 子集
- 括号生成
- 组合总和
动态规划
- 最大子数组和
- 买卖股票的最佳时机
- 买卖股票的最佳时机II
- 最长回文字串
- 最长递增子序列
- 爬楼梯
- 编辑距离
- 最长公共子序列
- 最长重复子数组
- 零钱兑换
- 最长有效括号
- 最小路径和
- 不同路径
- 最大正方形
- 打家劫舍
数学
- 用Rand7()实现Rand10()