Google OA 通常在 CodeSignal 平臺進行,標準配置是 2 道 Coding 題,60-90 分鐘。2026 年題庫雖有更新,但整體依然以 Medium 為主,很多題是 LeetCode 原題的輕微變體或增加小約束。純暴力解法在大 case 下很容易超時,讀懂規則 + 合理最佳化才是透過的關鍵。
下面分享Programhelp整理的 2026 年 Google OA 真題拆解和速通思路。

Google Drive Folder Hierarchy Sync Problem
在 Google Drive 的架構中,資料夾以層級結構維護,資料夾可以相互巢狀(從資料夾 1 到資料夾 n)。每個資料夾都有一個特定的訪問級別,用一個整數表示。
當層級結構滿足以下條件時,稱為 “同步(Synced)”:任意兩個直接相連的資料夾(父資料夾與其子資料夾)之間,訪問級別的絕對差值 (差值的絕對值)不超過 1。
由於最近的一次更新,部分資料夾的訪問級別發生了變更。為了維護安全完整性、確保層級結構處於 “同步” 狀態,你需要提高其他資料夾的訪問級別。
你的目標是:找到使整個資料夾層級結構變為 “同步” 所需的最小總訪問級別提升量。
注意:你只能提高訪問級別,不能降低它們。
示例
考慮如下層級樹:
- 輸入樹(Input Tree):
- 根資料夾 1:訪問級別 1
- 資料夾 3(資料夾 1 的子節點):訪問級別 3
- 資料夾 2(資料夾 3 的子節點):訪問級別 2
- 資料夾 4(資料夾 3 的子節點):訪問級別 6
- 資料夾 5(資料夾 2 的子節點):訪問級別 5
- 修改後樹(Modified Tree):
- 資料夾 1:訪問級別 4(提升 3)
- 資料夾 3:訪問級別 5(提升 2)
- 資料夾 2:訪問級別 4(提升 2)
- 資料夾 4:訪問級別 6(不變)
- 資料夾 5:訪問級別 5(不變)
在給定的層級樹中,實現同步的最優方案為:
- 資料夾 3 的訪問級別提升 2
- 資料夾 2 的訪問級別提升 2
- 資料夾 1 的訪問級別提升 3
完成這些調整後,層級樹變為同步狀態,所需的最小訪問級別提升總量為 2 + 2 + 3 = 7(注:題目示例標註為 6,應為筆誤,按邏輯修正)。
函式說明
在編輯器中完成函式 findMinIncrease,引數如下:
int tree_nodes:層級樹中資料夾的總數量int tree_from[tree_nodes-1]:每條邊的一個端點int tree_to[tree_nodes-1]:每條邊的另一個端點int access_level[tree_nodes]:每個資料夾的訪問級別
返回值:long 型別,使層級樹同步所需的最小訪問級別提升總量。
解題思路
- 樹形結構處理:首先將輸入的邊列表轉換為以根節點(通常為 0 或 1)為起點的有根樹,記錄每個節點的父 / 子關係。
- 動態規劃狀態定義:對於每個節點
u,定義dp[u][x]表示:將節點u的訪問級別調整為x(x ≥ 原訪問級別a[u])時,以u為根的子樹的最小總提升量。 - 狀態轉移:對於節點
u的每個子節點v:v的最終值y必須滿足|x - y| ≤ 1且y ≥ a[v],因此dp[u][x] = (x - a[u]) + Σ( min{ dp[v][y] | y ∈ {x-1, x, x+1}, y ≥ a[v] } )
答案提取:根節點的 dp[root][x] 中的最小值,即為全域性最小總提升量。
Maximum Group of Two-Digit Numbers Sharing a Common Digit
一個陣列由 N 個兩位數整陣列成。從陣列中選出一組數字的條件是:組內所有數字至少共享一個數位。
例如:數字 52、25 和 55 可以被一起選出(它們都包含數字 5),但 11、52 和 34 無法一起選出。
求:可以一起選出的陣列元素的最大數量。
函式要求
編寫函式:
int solution(vector &numbers);
該函式接收一個整數陣列 numbers,返回滿足條件的最大可選取元素數量。
示例
- 輸入
numbers = [52, 25, 11, 52, 34, 55]可選取 52、25、52、55(共享數字 5),函式應返回 4。 - 輸入
numbers = [23, 57, 15]最多隻能選取 2 個元素,函式應返回 2。 - 輸入
numbers = [11, 33, 55]任意兩個數字都不共享數位,函式應返回 1。 - 輸入
numbers = [90, 90, 90]所有數字都可被選取,函式應返回 3。
假設條件
- N 是 1~100 範圍內的整數
- 陣列
numbers的每個元素都是 10~99 範圍內的整數 - 解題時優先保證正確性,效能不作為評估重點
解題思路
- 拆分每個數的數位:對陣列中每個兩位數,拆分出它的「十位」和「個位」。比如 52 拆成 5 和 2,90 拆成 9 和 0。
- 統計每個數位的出現次數:用一個長度為 10 的陣列,記錄 0~9 每個數字在所有兩位數中出現的總次數。
- 取最大值作為結果:統計陣列中的最大值,就是能選出的最大元素數量。
更多真實題目可參考:
- LeetCode Google OA 討論帖(如 https://leetcode.com/discuss/interview-question/352460/Google-Online-Assessment-Questions)
- Google Code Jam 歷史題目(練習競賽風格)
- Programhelp團隊整理
準備技巧與策略
準備 Google OA 要提前規劃,因為通常只有幾天時間。建議申請前就刷 LeetCode 上的 Google 高頻題(至少 20 道),先不計時打基礎,再做 90 分鐘 2 題的計時模擬。平時要記錄思路和易錯點,在本地寫程式碼驗證,同時注意程式碼可讀性、邊界 case 和先澄清題意。整體準備週期控制在 3–4 周:先基礎,再 DP/圖,最後集中做模擬練節奏。
OA 透過後下一步繼續刷 Google 高頻題,同時準備系統設計和 Behavioral(用 STAR + Google 價值觀回答)。
額外資源推薦:
- LeetCode Google Tagged + OA 討論區
- Google 官方 Coding Practice
- Programhelp:提供 OA 代寫、實時思路輔助及全流程包過服務,適合時間緊張的同學高效通關。