2026 年 Google 实习生(SWE)面試流程雖然與往年略有不同,但核心考察點依舊圍繞演算法、數據結構與溝通能力。 下面分享兩道典型 VO 面試題,包含問題描述、澄清問題、解題思路及示例代碼。
Q1:找到最短佇列的長度
問題描述
給定若干只只能調用 pop() 與 empty() 的佇列,找出其中最短的佇列長度。
Clarify
- 佇列元素可重複。
pop()返回並移除隊首元素。- 一旦
empty()為真,該佇列視為完成。
思路
- 維護每個佇列的當前長度和完成狀態。
- 迴圈中對所有未完成佇列依次
pop(),并累加长度。 - 一旦某佇列變空,記錄其長度為候選最小值,並停止對該佇列的後續操作。
- 當所有佇列都完成時,最小長度即為答案。
範例代碼(Java)
public static int findShortestLength(Queue[] 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[] 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 代做、代碼輔導、面試類比、代面試等全流程服務, 陪你從投遞到上岸,全程保駕護航! 查看服务及价格 →
END