← 返回部落格列表 Uber OA 入門指南:四道仿真練習題 + 平台與節奏全解
Uber

Uber OA 入門指南:四道仿真練習題 + 平台與節奏全解

2026-06-02

如果你是第一次準備 Uber OA,最容易卡住的不是題難,而是不知道平台長什麼樣、節奏怎麼分配、什麼樣的題目算「正常水準」。Uber 的 OA 整體是 LeetCode Medium 偏中等,但因為同一時間窗內會下發到 SDE / Data Engineer / Data Scientist 多條線,新手如果按錯誤的題型方向準備,就會浪費一大半時間

這篇是站內首篇 Uber OA 入門級指南:先把「平台 + 時長 + 評分邏輯」講清楚,再給四道完全可練手的仿真題(不是站內已有的真題復盤),覆蓋前綴和、二元樹、並查集、DP 四個核心方向。讀完你應該能直接進入 90 分鐘模考狀態。

Uber OA 全景:平台、時長、題量

欄位 詳情
平台 HackerRank(絕大多數批次) + 個別批次走 CodeSignal
時長 90 分鐘(SDE) / 75 分鐘(DS, DE)
題量 2-3 道程式設計 + 偶爾 5-10 道 MCQ
程式語言 Python / Java / C++ / Go 主流
評分邏輯 分數 = AC 測試案例數 / 總案例數;時間複雜度過 hidden case

一條最重要的規則:HackerRank 的「執行」按鈕只跑前幾個 sample,通過 sample ≠ 通過提交——必須等「提交」後看到完整 hidden test 結果。

備考心態:什麼樣的水準算「夠格」?

自評維度 入門 合格 優秀
LeetCode Medium AC 速度 30-40 分鐘 20-25 分鐘 12-15 分鐘
資料結構熟練度 3 種以下 5-6 種 8 種以上
邊界 case 主動思考 常忘 寫完後補 寫之前列
平台 IO 熟練度 抓瞎 能寫 模板化

結論:合格水準就足夠過 Uber OA。不需要把自己練到 LeetCode Hard 一血

仿真題 1:前綴和——Trips 區間統計

給定 N 天每天的訂單數 trips[],給 Q 個查詢 (l, r),回傳區間 [l, r] 的訂單總和。N, Q ≤ 1e5。

思路:經典前綴和。

def range_trip_sum(trips, queries):
    pref = [0] * (len(trips) + 1)
    for i, t in enumerate(trips):
        pref[i+1] = pref[i] + t
    return [pref[r+1] - pref[l] for l, r in queries]

時間複雜度:預處理 O(N),每次查詢 O(1)。 練習目標:在 5 分鐘內寫出來。

仿真題 2:二元樹——城市路徑重建

輸入一個序列化字串 "1,2,#,3,#,#,4,#,#"(前序 + null 標記 #),重建二元樹,回傳根節點。

思路:用迭代器消費 token,遞迴構建。

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def deserialize(data: str):
    tokens = iter(data.split(','))
    def build():
        v = next(tokens)
        if v == '#':
            return None
        node = TreeNode(int(v))
        node.left = build()
        node.right = build()
        return node
    return build()

時間複雜度:O(N)。 練習目標:理解為何要用 iter 而不是索引。

仿真題 3:並查集——司機網路連通性

給 N 個司機 + M 條互相認識的關係。問最大的認識群體大小。

思路:union-find + 計數 root size。

class DSU:
    def __init__(self, n):
        self.p = list(range(n))
        self.sz = [1] * n
    def find(self, x):
        while self.p[x] != x:
            self.p[x] = self.p[self.p[x]]
            x = self.p[x]
        return x
    def union(self, a, b):
        ra, rb = self.find(a), self.find(b)
        if ra == rb:
            return
        if self.sz[ra] < self.sz[rb]:
            ra, rb = rb, ra
        self.p[rb] = ra
        self.sz[ra] += self.sz[rb]

def largest_group(n, edges):
    d = DSU(n)
    for a, b in edges:
        d.union(a, b)
    return max(d.sz[d.find(i)] for i in range(n))

時間複雜度:近似 O(α(N) · M)。 練習目標:在 8 分鐘內寫出 path compression + union by size。

仿真題 4:DP——Surge Pricing 最大化

給 N 個時段每個時段加價係數 mul[i],要求選出 K 個不相鄰時段,最大化加價係數之和。

思路:經典「打家劫舍」擴充到 K 選不相鄰。

def max_surge_choices(mul, K):
    n = len(mul)
    NEG = float("-inf")
    dp = [[NEG]*(K+1) for _ in range(n+1)]
    for i in range(n+1):
        dp[i][0] = 0
    for i in range(1, n+1):
        for k in range(1, K+1):
            dp[i][k] = dp[i-1][k]
            if i >= 2:
                dp[i][k] = max(dp[i][k], dp[i-2][k-1] + mul[i-1])
            else:
                dp[i][k] = max(dp[i][k], mul[i-1])
    return dp[n][K]

時間複雜度:O(N·K)。 練習目標:能在 12 分鐘內推導轉移方程並寫出來。

90 分鐘節奏推薦

時間段 任務
0-5 分鐘 通讀所有題面,按「我能多快做出」打分
5-30 分鐘 先做最有把握的一題,爭取 100% AC
30-65 分鐘 第二題,先暴力解過 sample,再優化
65-85 分鐘 第三題(如果有),寫到能 AC 一半即停
85-90 分鐘 檢查所有提交、關閉瀏覽器前確認

OA 之後:還有哪些坎?

階段 內容 時長
Recruiter Screen 行為 + 專案深挖 30 分鐘
Tech Phone 演算法 medium + 簡單系統 45 分鐘
Onsite 4-5 輪:演算法 + 系統 + 行為 + Hiring Manager 1 個工作日

FAQ

Q1:Uber OA 通過率大致多少? 官方未公布,社群估算 30-40%。兩道題接近全 AC 的同學幾乎都能進 Tech Phone。

Q2:HackerRank 平台 IO 怎麼寫最穩? 建議用 sys.stdin.readline + sys.stdout.write,比 input() / print() 快 5-10 倍,但別忘了 strip()

Q3:如果第一題卡 30 分鐘還沒出 sample,怎麼辦? 立刻切到第二題。Uber OA 評分按 AC 案例數累加,先 AC 一半優於卡死一題。

Q4:DS / DE 路線和 SDE 一樣難嗎? DS / DE 的 OA 多了 SQL 與 Pandas 題,時長少 15 分鐘。演算法題數量減少,但SQL 經常是 hard window function

Q5:Uber OA 之後多久收 Tech Phone? 通常 5-10 個工作日。HM hold 等情況 會延到 3 週。


正在準備 Uber OA?

如果你剛收到 OA 連結但擔心 90 分鐘節奏拿不下,或者想要面試日真人 OA代面 / VO代面 全程陪跑,可以聊聊看完整的 OA輔助 / VO輔助 方案。


聯絡方式

需要面試真題與客製備戰計畫?立刻聯絡微信 Coding0201獲取真題

Email: [email protected] Telegram: @OAVOProxy