一、基础算法与数据结构
数组与字符串
- 两数之和
- 三数之和
- 最长无重复字符子串
- 字符串反转(含单词反转)
- 有效的括号
- 合并两个有序数组
- 移除数组中的重复元素
- 最长公共前缀
- 字符串的排列
- 盛最多水的容器
链表
- 反转链表(单链表、双向链表)
- 链表的中间节点
- 链表中倒数第 k 个节点
- 合并两个有序链表
- 环形链表(判断是否有环、找环入口)
- 链表相交(找第一个公共节点)
- 删除链表中的节点(指定节点、重复节点)
栈与队列
- 用栈实现队列
- 用队列实现栈
- 最小栈(O (1) 获取最小值)
- 简化路径
- 滑动窗口最大值(队列实现)
哈希表
- 有效的字母异位词
- 哈希表设计(实现 put、get、remove)
- 四数相加 II
- 赎金信
- 字符串中的第一个唯一字符
树
- 二叉树的前序 / 中序 / 后序遍历(递归 + 迭代)
- 二叉树的层序遍历(BFS)
- 二叉树的深度(最大深度、最小深度)
- 对称二叉树
- 二叉搜索树的最近公共祖先
- 二叉树的最近公共祖先
- 验证二叉搜索树
- 二叉树的右视图
- 路径总和(判断是否存在、统计所有路径)
- 从中序与后序遍历序列构造二叉树
二、排序与查找
- 快速排序
- 归并排序
- 冒泡排序(优化版)
- 插入排序
- 二分查找(基础版、找左边界、找右边界)
- 排序数组中的第 K 个最大元素
- 数组中的第 K 个最小元素
- 合并区间(基于排序)
三、Java 核心特性相关
- 实现一个简单的 ArrayList
- 实现一个简单的 LinkedList
- 手写单例模式(饿汉式、懒汉式、双重校验锁、静态内部类、枚举)
- 实现线程安全的单例
- 手写线程池(基于 ThreadPoolExecutor 核心参数)
- 实现生产者 - 消费者模型(synchronized+wait/notify、Lock+Condition)
- 手写 HashMap(数组 + 链表 / 红黑树结构、hash 计算、扩容机制)
- 实现一个简单的 FutureTask
- 手写 LRU 缓存(链表 + 哈希表)
- 实现字符串分割(类似 split 方法,处理空字符串)
四、动态规划与贪心
- 爬楼梯(斐波那契变形)
- 打家劫舍
- 最大子数组和
- 零钱兑换(最少硬币数)
- 最长递增子序列
- 编辑距离
- 买卖股票的最佳时机(含多次买卖、冷冻期等变种)
- 分发饼干(贪心)
- 无重叠区间(贪心)
- 最长公共子序列
五、其他高频场景题
- 手写单链表的快速排序
- 大数相加(处理超出 int/long 范围的数字)
- 判定是否为回文数(整数、字符串)
- 岛屿数量(DFS/BFS)
- 旋转图像(二维数组旋转 90 度)
- 螺旋矩阵(顺时针 / 逆时针打印)
- 除自身以外数组的乘积
- 寻找重复数
- 验证 IP 地址
- 最长回文子串