IBM OA 高頻演算法真題整理與詳解(2025–2026 最新版)| IBM OA 備考指南 

1,516Views

在科技行業競爭越來越激烈的當下, IBM OA 依然保持著一貫風格:題目不偏,但對基礎能力要求極高。我們把近幾年 IBM 高頻出現的 6 類演算法題系統梳理一遍。把每一題背後的思維路徑講清楚,讓你在考場上能做到:看到題型 → 快速定位解法 → 穩定寫出程式碼。

IBM OA 高頻演算法真題整理與詳解(2025–2026 最新版)| IBM OA 備考指南 

題目 1:最多不重疊時間區間

描述:給定兩個長度為 n 的陣列 startTime 和 endTime,每個區間為左閉右開 [startTime[i], endTime[i])。求最多能選擇多少個互不重疊的區間。

樣例

  • n=3, start=[1,1,2], end=[3,2,4] → 輸出 2(選 [1,2) 和 [2,4))

約束:n ≤ 10⁵,時間 1~10⁹

思路:經典活動選擇問題。按結束時間排序,貪心選擇當前最早結束且不與已選衝突的區間。

程式碼(Python)

def maxNonOverlapping(start, end):

    intervals = sorted(zip(start, end), key=lambda x: x[1])

    count = 0

    last_end = -float('inf')

    for s, e in intervals:

        if s >= last_end:

            count += 1

            last_end = e

    return count

時間複雜度:O(n log n)

題目 2:股票最大漲幅差(單次買賣最大利潤變種)

描述:給定整數陣列,找到 i < j 且 arr[i] < arr[j] 時,arr[j] – arr[i] 的最大值。若不存在,返回 -1。

樣例

  • [5,3,6,7,4] → 4(7-3)
  • [4,3,2,1] → -1

約束:n ≤ 2×10⁵,元素 ±10⁶

思路:一次遍歷,維護歷史最小值,更新最大差值。

程式碼

def maxProfit(arr):

    if not arr:

        return -1

    min_price = arr[0]

    max_diff = -1

    for price in arr[1:]:

        if price > min_price:

            max_diff = max(max_diff, price - min_price)

        min_price = min(min_price, price)

    return max_diff

時間複雜度:O(n)

題目 3:n 個頂點構圖總數(快速冪)

描述:n 個頂點(labeled),構造無向簡單圖(無自環、無重邊,可不連通)。每對頂點可連邊或不連邊,求總方案數,對 10⁹+7 取模。

樣例

  • n=2 → 2
  • n=4 → 64

思路:可能邊數為 C(n,2) = n(n-1)/2,每條邊 2 種選擇 → 答案為 2^{n(n-1)/2} % MOD。n ≤ 10⁹,必須用快速冪。

程式碼

MOD = 10**9 + 7

def countGraphs(n):

    if n == 1:

        return 1

    exp = n * (n - 1) // 2

    # pow(base, exp, mod)

    return pow(2, exp, MOD)

時間複雜度:O(log (n²))

題目 4:合法三元組計數

描述:給定互不相同的整數陣列 d 和閾值 t,統計滿足 d[a] < d[b] < d[c] 且 d[a]+d[b]+d[c] <= t 的三元組 (a,b,c) 個數(下標不要求順序,只看值)。

樣例:d=[1,2,3,4,5], t=8 → 4(1+2+3=6, 1+2+4=7, 1+2+5=8, 1+3+4=8)

約束:n ≤ 10⁴,d[i] < 10⁹,t < 3×10⁹

思路:先排序(O(n log n))。固定 i < j,雙指標找最大的 k 滿足 d[i]+d[j]+d[k] d[j]。

程式碼

def countTriplets(d, t):

    d = sorted(d)

    n = len(d)

    count = 0

    for i in range(n-2):

        j = i + 1

        k = n - 1

        while j < k:

            if d[i] + d[j] + d[k] <= t:

                # 從 j+1 到 k 都滿足(已排序)

                count += k - j

                j += 1

            else:

                k -= 1

    return count

時間複雜度:O(n²)

題目 5:最大技能團隊人數(滑動視窗 + 雙端佇列)

描述:給定技能陣列,選最長子陣列,使得陣列中最大值 – 最小值 ≤ 限定差值(題目中未明確寫限定值,常見為給定 limit)。

樣例:[4,13,2,3] → 3([4,2,3] 或類似,假設 limit 足夠)

約束:n ≤ 10⁵

思路:滑動視窗 + 雙端佇列維護視窗內最大值和最小值。視窗不滿足時左端右移。

程式碼框架(假設有 limit 引數):

from collections import deque

def maxTeamSize(skills, limit):

    n = len(skills)

    left = 0

    maxq = deque()

    minq = deque()

    ans = 0

    for right in range(n):

        # 維護最大值佇列(遞減)

        while maxq and skills[maxq[-1]] = skills[right]:

            minq.pop()

        minq.append(right)

        # 收縮視窗

        while skills[maxq[0]] - skills[minq[0]] > limit:

            left += 1

            if maxq[0] < left: maxq.popleft()

            if minq[0] < left: minq.popleft()

        ans = max(ans, right - left + 1)

    return ans

時間複雜度:O(n)

題目 6:任務字典序最小重排(奇偶任務可互換)

描述:任務優先順序為個位數。奇數=CPU 任務,偶數=IO 任務。只能交換相鄰一奇一偶的任務。求可達到的字典序最小的優先順序序列。

核心:同奇(或同偶)任務的相對順序不可改變;奇偶任務可任意穿插(因為可自由交換)。

思路:分別提取奇數序列和偶數序列(保持原相對順序),然後像歸併一樣貪心合併,得到字典序最小的交錯序列。

程式碼

def minLexReorder(tasks):

    odds = [x for x in tasks if x % 2 == 1]

    evens = [x for x in tasks if x % 2 == 0]

    i = j = 0

    result = []

    while i < len(odds) or j < len(evens):

        if i == len(odds):

            result.append(evens[j])

            j += 1

        elif j == len(evens):

            result.append(odds[i])

            i += 1

        elif odds[i] < evens[j]:

            result.append(odds[i])

            i += 1

        else:

            result.append(evens[j])

            j += 1

    return result

寫在最後

以上 6 道題目是 IBM 面試中反覆出現的高頻真題,掌握它們能顯著提升透過率。演算法面試的核心在於理解本質而非死記硬背,建議大家在練習時注重時間複雜度和邊界條件處理。如果你希望獲得更多 IBM 真題解析、Java/C++ 版本程式碼、實時面試助攻,或針對性刷題計劃,歡迎聯絡 ProgramHelp

ProgramHelp 專注於大廠演算法面試輔導,累計幫助數千名同學成功拿到包括 IBM、Google、等 FAANG offer。我們提供:

  • 最新大廠真題整理與影片講解
  • 個性化刷題路線規劃
  • 模擬面試與程式碼 Review
  • OA無痕助攻
  • VO實時輔助
author avatar
Jory Wang Amazon資深軟體開發工程師
Amazon 資深工程師,專注 基礎設施核心系統研發,在系統可擴充套件性、可靠性及成本最佳化方面具備豐富實戰經驗。 目前聚焦 FAANG SDE 面試輔導,一年內助力 30+ 位候選人成功斬獲 L5 / L6 Offer。
END
 0