← 返回部落格列表 IBM OA 實戰複盤:HackerRank 兩題 × 高負載時間戳 × 並查集連通性
IBM

IBM OA 實戰複盤:HackerRank 兩題 × 高負載時間戳 × 並查集連通性

2026-06-02

IBM 的 OA 用的是 HackerRank 平台,整體難度比一些大廠要友好——通常給一個小時、兩道題,準備過 LeetCode Medium 水平的同學基本綽綽有餘。但「簡單」不等於「隨便過」:題目描述喜歡用業務場景包裝,讀題不仔細照樣會翻車。

這篇把兩道高頻真題完整拆開:一道是陣列遍歷 + 平均值判斷,一道是圖連通性 + 並查集,都給出可直接提交的 Python 解法和複雜度。

IBM OA 基本情況

項目 說明
平台 HackerRank
題目數量 2 題
時長 60 分鐘
難度 基礎到中等(陣列模擬 / 前綴和 / 並查集 / 圖論)
通過線 兩題盡量全 AC,時間通常很寬裕

實測兩題加起來 20 分鐘內可以做完,剩下時間足夠反覆檢查隱藏用例邊界。

Question 1: High Load Timestamps(高負載時間戳)

題目要求

給定陣列 load[n],表示各時間戳的伺服器負載。找出所有下標 i(0-based),使得 load[i] > 2 × 平均負載,按升序返回。若沒有,返回空陣列。

範例

n = 3
load = [1, 2, 9]
average = (1 + 2 + 9) / 3 = 4
2 × average = 8
只有 load[2] = 9 > 8
答案 = [2]

思路

先求總和再求平均,然後遍歷一遍判斷 load[i] > 2 × average。注意為了避免浮點誤差,把「除法」改成「乘法」比較:load[i] * n > 2 * total

def get_high_load_timestamps(load):
    n = len(load)
    total = sum(load)
    # load[i] > 2 * (total / n)  等價於  load[i] * n > 2 * total
    return [i for i in range(n) if load[i] * n > 2 * total]

時間複雜度:O(n),一次求和 + 一次遍歷。 踩坑點

Question 2: Minimum Reassignments for Connectivity(連通性最小重連數)

題目要求

管理 link_nodes 個分散式程式碼倉庫,部分倉庫已透過直接版本連結同步。可以執行任意次「重連」:拆掉一條已有連結,把它接到任意另一對倉庫上。求讓所有倉庫連成一個同步系統所需的最少重連次數;若不可能,返回 -1。

範例

link_nodes = 4
link_from = [1, 1, 3]
link_to   = [2, 3, 4]

思路

這是經典圖連通性題:

  1. 一個含 n 個節點的連通圖至少需要 n - 1 條邊。如果現有邊數 < n - 1,無論怎麼重連都連不起來,直接返回 -1
  2. 否則用並查集統計當前有多少個連通塊 c
  3. 因為允許拆已有邊重連,只要總邊數足夠,把 c 個連通塊拼成 1 個需要的額外連接數就是 c - 1
def min_reassignments(link_nodes, link_from, link_to):
    edges = len(link_from)
    # 連通所有節點至少需要 n - 1 條邊
    if edges < link_nodes - 1:
        return -1

    parent = list(range(link_nodes + 1))  # 1-based 節點

    def find(x):
        while parent[x] != x:
            parent[x] = parent[parent[x]]  # 路徑壓縮
            x = parent[x]
        return x

    def union(a, b):
        ra, rb = find(a), find(b)
        if ra != rb:
            parent[ra] = rb

    for a, b in zip(link_from, link_to):
        union(a, b)

    # 統計連通塊數量(只數 1..link_nodes)
    components = len({find(i) for i in range(1, link_nodes + 1)})
    return components - 1

時間複雜度:O(E · α(N)),並查集近似線性。 踩坑點

備考題型清單

題型 出現頻率 代表技巧
陣列模擬 / 平均值判斷 整數乘法替代浮點
前綴和 / 滑動視窗 區間和 O(1) 查詢
並查集 / 圖連通性 路徑壓縮 + 連通塊計數
字串處理 計數 / 雜湊分組

FAQ

Q1:IBM OA 的題型難度大嗎? 不算大,整體偏基礎,考的都是常見演算法和圖論思路。刷過 LeetCode Medium 水平就能輕鬆應對。

Q2:OA 平台是哪個? HackerRank,介面和操作跟常見 OA 平台差不多,提前熟悉提交流程即可。

Q3:一小時兩題夠用嗎? 絕對夠用。兩題熟練的話 20 分鐘內可以做完,剩下時間反覆檢查隱藏用例。

Q4:需要提前刷哪些題? 重點準備陣列模擬、前綴和、並查集、圖連通性。IBM OA 主要看基礎演算法能力,不會太花俏。

Q5:用什麼語言? HackerRank 支援主流語言,Python / Java / C++ 都行,按最熟的來;並查集用 Python 寫最快。


正在準備 IBM OA?

IBM OA 雖然偏基礎,但讀題不細、並查集邊界沒處理好同樣會丟分。需要針對性的題型梳理和限時 mock,歡迎聯絡下方方式取得真題與備戰計畫。


聯絡方式

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

Email: [email protected] Telegram: @OAVOProxy