美少年实习生后端Java笔试题解析
面试题目
笔试概况
- 题型:10道单选题 + 5道不定项选择题 + 3道算法题
- 难度:算法题整体不难
算法题
第1题(核心模式):消除相邻元素
消除字符串/数组中相邻的相同元素,使用栈实现。
第2题(ACM模式):数组数字排序拼接输出
输入一个数组,将数组中的数字排序后拼接成字符串输出。
(使用了 Arrays.sort,不确定是否可行。)
第3题(ACM模式):字符串加密填充
给定一个字符串和一个数字,数字代表容器的行数,将字符串依次填充进容器,最后按行输出结果(类似栅栏密码/矩阵填充加密)。
参考解析
第1题:消除相邻元素(栈)
- 遍历字符串/数组,维护一个栈。
- 若当前元素与栈顶元素相同,则弹出栈顶(消除);否则将当前元素压栈。
- 遍历结束后,栈中剩余元素即为结果。
- 时间复杂度 O(n),空间复杂度 O(n)。
- Java 可用
Deque<Character> stack = new ArrayDeque<>()实现。
第2题:数组数字排序拼接输出
- 读取输入数组后,使用
Arrays.sort()排序,再用StringBuilder拼接输出即可。 - 注意 ACM 模式需要自行处理输入(
Scanner或BufferedReader)。 Arrays.sort对基本类型为双轴快速排序,完全可用,不影响结果。- 若题目要求”最小数字拼接最小”(如大数排列),需自定义比较器:按字符串拼接
a+bvsb+a排序。
第3题:字符串加密填充(矩阵/栅栏密码)
- 给定行数
rows,将字符串按列顺序逐字符填入二维矩阵(每列一个字符)。 - 计算列数:
cols = ceil(len / rows),构建rows × cols的矩阵。 - 按顺序填充后,逐行读取矩阵内容拼接输出,空位可忽略或填充占位符(视题意而定)。
- 本质是字符串按固定行数分组重排,注意边界处理(最后一列可能不满)。