在Java后端开发岗位的面试中,手写算法题主要考察候选人对基础算法、数据结构和编程能力的掌握。以下是100道高频手写算法题,按分类整理,覆盖经典题型和实际场景:
一、数组与矩阵
-
两数之和(LeetCode 1)
-
三数之和(LeetCode 15)
-
盛最多水的容器(LeetCode 11)
-
移动零(LeetCode 283)
-
旋转数组(LeetCode 189)
-
合并区间(LeetCode 56)
-
搜索旋转排序数组(LeetCode 33)
-
螺旋矩阵(LeetCode 54)
-
矩阵置零(LeetCode 73)
-
岛屿数量(LeetCode 200)
二、字符串
-
反转字符串(LeetCode 344)
-
最长回文子串(LeetCode 5)
-
字符串转换整数(atoi)(LeetCode 8)
-
最长公共前缀(LeetCode 14)
-
有效的括号(LeetCode 20)
-
字符串的排列(LeetCode 567)
-
无重复字符的最长子串(LeetCode 3)
-
最小覆盖子串(LeetCode 76)
-
编辑距离(LeetCode 72)
-
正则表达式匹配(LeetCode 10)
三、链表
-
反转链表(LeetCode 206)
-
合并两个有序链表(LeetCode 21)
-
链表中倒数第k个节点(剑指 Offer 22)
-
环形链表(LeetCode 141)
-
环形链表 II(求入口点,LeetCode 142)
-
相交链表(LeetCode 160)
-
合并K个升序链表(LeetCode 23)
-
删除链表的倒数第N个节点(LeetCode 19)
-
LRU缓存(LeetCode 146)
-
复制带随机指针的链表(LeetCode 138)
四、树与二叉树
-
二叉树的前序/中序/后序遍历(递归与非递归)
-
二叉树的层序遍历(LeetCode 102)
-
验证二叉搜索树(LeetCode 98)
-
二叉树的最大深度(LeetCode 104)
-
对称二叉树(LeetCode 101)
-
路径总和(LeetCode 112)
-
二叉树的最近公共祖先(LeetCode 236)
-
二叉树的序列化与反序列化(LeetCode 297)
-
从前序与中序遍历序列构造二叉树(LeetCode 105)
-
平衡二叉树(LeetCode 110)
五、动态规划(DP)
-
爬楼梯(LeetCode 70)
-
打家劫舍(LeetCode 198)
-
最长递增子序列(LeetCode 300)
-
零钱兑换(LeetCode 322)
-
最长公共子序列(LCS)
-
编辑距离(LeetCode 72)
-
不同路径(LeetCode 62)
-
分割等和子集(LeetCode 416)
-
单词拆分(LeetCode 139)
-
最大子数组和(LeetCode 53)
六、堆、栈与队列
-
最小栈(LeetCode 155)
-
有效的括号(栈应用,LeetCode 20)
-
用队列实现栈(LeetCode 225)
-
用栈实现队列(LeetCode 232)
-
滑动窗口最大值(LeetCode 239)
-
数据流中的中位数(LeetCode 295)
-
前K个高频元素(LeetCode 347)
-
接雨水(LeetCode 42)
-
柱状图中最大的矩形(LeetCode 84)
-
设计循环队列(LeetCode 622)
七、二分查找
-
二分查找(LeetCode 704)
-
搜索插入位置(LeetCode 35)
-
在排序数组中查找元素的第一个和最后一个位置(LeetCode 34)
-
x的平方根(LeetCode 69)
-
寻找旋转排序数组中的最小值(LeetCode 153)
-
寻找峰值(LeetCode 162)
-
有序数组中的缺失数字(变种题)
-
第一个错误的版本(LeetCode 278)
-
寻找重复数(LeetCode 287)
-
H指数 II(LeetCode 275)
八、回溯与DFS/BFS
-
全排列(LeetCode 46)
-
子集(LeetCode 78)
-
组合总和(LeetCode 39)
-
括号生成(LeetCode 22)
-
N皇后(LeetCode 51)
-
单词搜索(LeetCode 79)
-
岛屿的最大面积(LeetCode 695)
-
电话号码的字母组合(LeetCode 17)
-
分割回文串(LeetCode 131)
-
复原IP地址(LeetCode 93)
九、位运算与数学
-
位1的个数(LeetCode 191)
-
汉明距离(LeetCode 461)
-
只出现一次的数字(LeetCode 136)
-
2的幂(LeetCode 231)
-
颠倒二进制位(LeetCode 190)
-
两数相除(LeetCode 29)
-
回文数(LeetCode 9)
-
多数元素(LeetCode 169)
-
缺失数字(LeetCode 268)
-
最大公约数与最小公倍数(手写实现)
十、设计题与高级数据结构
-
实现Trie(前缀树)(LeetCode 208)
-
设计哈希表(手写HashMap)
-
设计生产者-消费者模型(多线程)
-
实现快速排序(QuickSort)
-
实现归并排序(MergeSort)
-
实现堆排序(HeapSort)
-
并查集(Union-Find)的实现
-
拓扑排序(LeetCode 207)
-
字典树实现敏感词过滤
-
设计定时器(时间轮算法或优先队列)
高频考察点总结
-
必考基础:链表反转、二叉树遍历、二分查找、快速排序、动态规划(如背包问题)。
-
实际场景题:LRU缓存、生产者消费者模型、哈希表设计。
-
代码健壮性:注意边界条件(如空输入、负数)、时间复杂度和空间复杂度优化。
建议结合LeetCode和《剑指Offer》练习,手写代码时注意变量命名和注释,面试中需清晰解释思路。