
2026 年 Google 实习生(SWE)面试流程虽然与往年略有不同,但核心考察点依旧围绕算法、数据结构与沟通能力。下面分享两道典型 VO面试题,包含问题描述、澄清问题、解题思路及示例代码。
Q1:找到最短队列的长度
问题描述
给定若干只只能调用 pop()
与 empty()
的队列,找出其中最短的队列长度。
Clarify
- 队列元素可重复。
pop()
返回并移除队首元素。- 一旦
empty()
为真,该队列视为完成。
思路
- 维护每个队列的当前长度和完成状态。
- 循环中对所有未完成队列依次
pop()
,并累加长度。 - 一旦某队列变空,记录其长度为候选最小值,并停止对该队列的后续操作。
- 当所有队列都完成时,最小长度即为答案。
示例代码(Java)
public static int findShortestLength(Queue<Integer>[] queues) {
int n = queues.length;
int[] lengths = new int[n];
boolean[] done = new boolean[n];
int minLen = Integer.MAX_VALUE;
while (true) {
boolean allDone = true;
for (int i = 0; i < n; i++) {
if (!done[i]) {
allDone = false;
queues[i].pop();
lengths[i]++;
if (queues[i].empty()) {
done[i] = true;
minLen = Math.min(minLen, lengths[i]);
}
}
}
if (allDone) break;
}
return minLen;
}
Q2:找到元素和最小的队列
问题描述
同样对若干只能 pop()
/empty()
的队列,找出元素和最小的队列,并返回该最小和。
Clarify
- 维护每个队列弹出元素的累加和。
- 一旦某队列变空,比较并更新全局最小和。
思路
- 对所有未完成队列依次
pop()
并累加其和。 - 如果某队列空了,记录其总和并更新全局最小值。
- 为了提前终止,可在循环中检测:若所有未完成队列当前累加和都 ≥ 已知最小和,则可跳出。
示例代码(Java)
public static int findSmallestSum(Queue<Integer>[] queues) {
int n = queues.length;
int[] sums = new int[n];
boolean[] done = new boolean[n];
int minSum = Integer.MAX_VALUE;
while (true) {
boolean allDone = true;
boolean possibleSmaller = false;
for (int i = 0; i < n; i++) {
if (!done[i]) {
allDone = false;
int v = queues[i].pop();
sums[i] += v;
if (queues[i].empty()) {
done[i] = true;
minSum = Math.min(minSum, sums[i]);
} else if (sums[i] < minSum) {
possibleSmaller = true;
}
}
}
if (allDone || !possibleSmaller) break;
}
return minSum;
}
联系我们
如果准备过程中遇到卡壳、没思路、时间不够用,ProgramHelp 提供 OA 代做、代码辅导、面试模拟、代面试等全流程服务, 陪你从投递到上岸,全程保驾护航! 查看服务及价格 →
正文完