Java后端开发hot 100

217 阅读5分钟

在Java后端开发岗位的面试中,手写算法题主要考察候选人对基础算法、数据结构和编程能力的掌握。以下是100道高频手写算法题,按分类整理,覆盖经典题型和实际场景:


一、数组与矩阵

  1. 两数之和(LeetCode 1)  

  2. 三数之和(LeetCode 15)  

  3. 盛最多水的容器(LeetCode 11)  

  4. 移动零(LeetCode 283)  

  5. 旋转数组(LeetCode 189)  

  6. 合并区间(LeetCode 56)  

  7. 搜索旋转排序数组(LeetCode 33)  

  8. 螺旋矩阵(LeetCode 54)  

  9. 矩阵置零(LeetCode 73)  

  10. 岛屿数量(LeetCode 200)


二、字符串

  1. 反转字符串(LeetCode 344)  

  2. 最长回文子串(LeetCode 5)  

  3. 字符串转换整数(atoi)(LeetCode 8)  

  4. 最长公共前缀(LeetCode 14)  

  5. 有效的括号(LeetCode 20)  

  6. 字符串的排列(LeetCode 567)  

  7. 无重复字符的最长子串(LeetCode 3)  

  8. 最小覆盖子串(LeetCode 76)  

  9. 编辑距离(LeetCode 72)  

  10. 正则表达式匹配(LeetCode 10)


三、链表

  1. 反转链表(LeetCode 206)  

  2. 合并两个有序链表(LeetCode 21)  

  3. 链表中倒数第k个节点(剑指 Offer 22)  

  4. 环形链表(LeetCode 141)  

  5. 环形链表 II(求入口点,LeetCode 142)  

  6. 相交链表(LeetCode 160)  

  7. 合并K个升序链表(LeetCode 23)  

  8. 删除链表的倒数第N个节点(LeetCode 19)  

  9. LRU缓存(LeetCode 146)  

  10. 复制带随机指针的链表(LeetCode 138)


四、树与二叉树

  1. 二叉树的前序/中序/后序遍历(递归与非递归)  

  2. 二叉树的层序遍历(LeetCode 102)  

  3. 验证二叉搜索树(LeetCode 98)  

  4. 二叉树的最大深度(LeetCode 104)  

  5. 对称二叉树(LeetCode 101)  

  6. 路径总和(LeetCode 112)  

  7. 二叉树的最近公共祖先(LeetCode 236)  

  8. 二叉树的序列化与反序列化(LeetCode 297)  

  9. 从前序与中序遍历序列构造二叉树(LeetCode 105)  

  10. 平衡二叉树(LeetCode 110)


五、动态规划(DP)

  1. 爬楼梯(LeetCode 70)  

  2. 打家劫舍(LeetCode 198)  

  3. 最长递增子序列(LeetCode 300)  

  4. 零钱兑换(LeetCode 322)  

  5. 最长公共子序列(LCS)  

  6. 编辑距离(LeetCode 72)  

  7. 不同路径(LeetCode 62)  

  8. 分割等和子集(LeetCode 416)  

  9. 单词拆分(LeetCode 139)  

  10. 最大子数组和(LeetCode 53)


六、堆、栈与队列

  1. 最小栈(LeetCode 155)  

  2. 有效的括号(栈应用,LeetCode 20)  

  3. 用队列实现栈(LeetCode 225)  

  4. 用栈实现队列(LeetCode 232)  

  5. 滑动窗口最大值(LeetCode 239)  

  6. 数据流中的中位数(LeetCode 295)  

  7. 前K个高频元素(LeetCode 347)  

  8. 接雨水(LeetCode 42)  

  9. 柱状图中最大的矩形(LeetCode 84)  

  10. 设计循环队列(LeetCode 622)


七、二分查找

  1. 二分查找(LeetCode 704)  

  2. 搜索插入位置(LeetCode 35)  

  3. 在排序数组中查找元素的第一个和最后一个位置(LeetCode 34)  

  4. x的平方根(LeetCode 69)  

  5. 寻找旋转排序数组中的最小值(LeetCode 153)  

  6. 寻找峰值(LeetCode 162)  

  7. 有序数组中的缺失数字(变种题)  

  8. 第一个错误的版本(LeetCode 278)  

  9. 寻找重复数(LeetCode 287)  

  10. H指数 II(LeetCode 275)


八、回溯与DFS/BFS

  1. 全排列(LeetCode 46)  

  2. 子集(LeetCode 78)  

  3. 组合总和(LeetCode 39)  

  4. 括号生成(LeetCode 22)  

  5. N皇后(LeetCode 51)  

  6. 单词搜索(LeetCode 79)  

  7. 岛屿的最大面积(LeetCode 695)  

  8. 电话号码的字母组合(LeetCode 17)  

  9. 分割回文串(LeetCode 131)  

  10. 复原IP地址(LeetCode 93)


九、位运算与数学

  1. 位1的个数(LeetCode 191)  

  2. 汉明距离(LeetCode 461)  

  3. 只出现一次的数字(LeetCode 136)  

  4. 2的幂(LeetCode 231)  

  5. 颠倒二进制位(LeetCode 190)  

  6. 两数相除(LeetCode 29)  

  7. 回文数(LeetCode 9)  

  8. 多数元素(LeetCode 169)  

  9. 缺失数字(LeetCode 268)  

  10. 最大公约数与最小公倍数(手写实现)


十、设计题与高级数据结构

  1. 实现Trie(前缀树)(LeetCode 208)  

  2. 设计哈希表(手写HashMap)  

  3. 设计生产者-消费者模型(多线程)  

  4. 实现快速排序(QuickSort)  

  5. 实现归并排序(MergeSort)  

  6. 实现堆排序(HeapSort)  

  7. 并查集(Union-Find)的实现  

  8. 拓扑排序(LeetCode 207)  

  9. 字典树实现敏感词过滤  

  10. 设计定时器(时间轮算法或优先队列)


高频考察点总结

  • 必考基础:链表反转、二叉树遍历、二分查找、快速排序、动态规划(如背包问题)。

  • 实际场景题:LRU缓存、生产者消费者模型、哈希表设计。

  • 代码健壮性:注意边界条件(如空输入、负数)、时间复杂度和空间复杂度优化。

建议结合LeetCode和《剑指Offer》练习,手写代码时注意变量命名和注释,面试中需清晰解释思路。