HRT OA 好容易就通過了!只花了13分鐘 | 2026 最新深度分享

1,474Views

老實說,這次 HRT OA 難度不算高,尤其是對我這種已經刷過很多 TikTok、Jane Street、Citadel 等量化/高頻交易公司 OA 的人來說,題目非常熟悉,整體體驗相當輕鬆。以下我把這次 OA 的真實狀況、題目特色解題思路詳細分享給大家,希望能幫到正在準備 HRT OA 的同學。

HRT OA 好容易就通過了!只花了13分鐘 | 2026 最新深度分享

HRT OA 整體狀況

  • 平臺:CodeSignal
  • 題量:4 道 Coding 題
  • 時長:90 分鐘(我實際上只花了 13 分鐘)
  • 難度:Easy ~ Medium,整體友好

HRT 的 OA 風格和 TikTok 比較接近,題目以字串、陣列、數學模擬、簡單貪心/DP 為主,程式碼量不大,但需要思路清晰、邊界處理穩。

題目 1:網站評分紀錄

題目描述

你給喜歡的網站評分,初始分數為 1500。每次分數變化都記錄在數組 diffs 中(正數加分,負數減分)。

請回傳一個數組 [最高評分, 目前評分]

例子

輸入:diffs = [100, -200, 350, 100, -600]

過程:

  • 初始:1500
  • 1500 + 100 = 1600
  • 1600 – 200 = 1400
  • 1400 + 350 = 1750
  • 1750 + 100 = 1850 (最高)
  • 1850 – 600 = 1250 (目前)輸出:[1850, 1250]

解題思路

  1. 初始化 current = 1500max_rating = 1500
  2. 遍歷 diffs,每次更新 current,並更新 max_rating
  3. 最後返回 [max_rating, current]

Python 程式碼

def solution(diffs):
    current = 1500
    max_rating = current
    for d in diffs:
        current += d
        if current > max_rating:
            max_rating = current
    return [max_rating, current]

題目 2:穿梭機行程時間計算

題目描述

你需要在星球 Alpha 和 Beta 之間往返完成 missions 次任務(每次任務:Alpha→Beta→Alpha)。

  • alpha2beta:從 Alpha 出發的穿梭機出發時間(依時間順序排列),單程耗時 100 個時間單位。
  • beta2alpha:從 Beta 出發的穿梭機出發時間(依時間順序排列),單程耗時 100 個時間單位。每次都選擇最早可搭乘的班次。請計算完成所有任務的總時間。

例子

輸入:alpha2beta = [0, 200, 500], beta2alpha = [99, 210, 450], missions = 1

過程:

  1. 坐 Alpha 0 點的穿梭機,100 到達 Beta
  2. 在 Beta 最早能搭 210 出發的穿梭機,310 回到 Alpha輸出:310

解題思路

  1. 維護當前時間 time = 0
  2. 循環 missions 次:
    • 找到第一個 >= timealpha2beta 班次,到達 Beta 的時間是 班次時間 + 100
    • 用到達 Beta 的時間,找第一個 >= 到達Beta時間beta2alpha 班次,回到 Alpha 的時間是 班次時間 + 100
    • 更新 time 回到 Alpha 的時間
  3. 返回最終的 time

Python 程式碼

def solution(alpha2beta, beta2alpha, missions):
    time = 0
    for _ in range(missions):
        # 去程:找第一個 >= 目前時間的班次
        for dep in alpha2beta:
            if dep >= time:
                time = dep + 100 # 到達Beta
                break
        # 回程:找第一個 >= 到達Beta時間的班次
        for dep in beta2alpha:
            if dep >= time:
                time = dep + 100 # 回到Alpha
                break
    return time

題目 3:報紙排版

題目描述

給定 paragraphs(二維數組,每個子數組是一段的文字區塊)和 width(每行最大字元數,不含邊框),需要產生居中對齊、有星號邊框的報紙頁面:

  1. 每段從新行開始,文字區塊用空格連接,不能拆分單一文字區塊。
  2. 若一行文字(含空格)長度小於 width,需要居中:
    • 剩餘空間為偶數:前後空格數相同
    • 剩餘空間為奇數:前面比後面少一個空格(或題目描述前面和後面相等,多的一個放後面)
  3. 外圍用 * 做邊框,傳回每一行的字串陣列。

解題思路

  1. 文字分行
    • 遍歷每個段落,依照規則把文字區塊拼成一行,長度不超過 width
    • 文字區塊之間用空格連接
  2. 居中處理
    • 計算剩餘空格 pad = width - len(line)
    • 前空格數 left = pad // 2,後空格數 right = pad - left
    • 產生居中後的行
  3. 加上邊框
    • 首尾行:* 重複 width + 2
    • 中間行:* + 居中後的文字 + *

Python 程式碼

def solution(paragraphs, width):
    lines = []
    # 步驟1:分行
    for para in paragraphs:
        current_line = []
        current_len = 0
        for chunk in para:
            if not current_line:
                # 新行直接加
                current_line.append(chunk)
                current_len = len(chunk)
            else:
                needed = current_len + 1 + len(chunk)
                if needed <= width:
                    current_line.append(chunk)
                    current_len = needed
                else:
                    # 結束目前行
                    lines.append(' '.join(current_line))
                    current_line = [chunk]
                    current_len = len(chunk)
        if current_line:
            lines.append(' '.join(current_line))
    # 步驟2:居中
    centered = []
    for line in lines:
        pad = width - len(line)
        left = pad // 2
        right = pad - left
        centered_line = ' ' * left + line + ' ' * right
        centered.append(centered_line)
    # 步驟3:加上邊框
    border = '*' * (width + 2)
    result = [border]
    for line in centered:
        result.append('*' + line + '*')
    result.append(border)
    return result

題目 4:鋸齒序列子數組計數

題目描述

定義一個鋸齒序列:相鄰元素的奇偶性交替變化(如:奇 – 偶 – 奇 – 偶… 或 偶 – 奇 – 偶 – 奇…)。

給定數組 Arr,統計所有連續子數組中,滿足鋸齒序列條件的子數組數量(長度≥1)。

例子

  1. arr = [1,3,5,7,9]:所有元素都是奇數,只有長度為 1 的子數組滿足條件 → 答案 5
  2. arr = [1,2,1,2,1]:所有連續子數組都滿足條件 → 總數 5*(5+1)/2 = 15
  3. arr = [1,2,3,7,6,5]:不滿足條件的位置是 37(都是奇數),所以分段統計:
    • [1,2,3]:長度 3,子數組數 3*4/2=6
    • [7,6,5]:長度 3,子數組數 3*4/2=6合計 12

解題思路

  1. 關鍵觀察:連續子數組是否為鋸齒序列,取決於相鄰元素的奇偶性是否交替。
    • 先把陣列轉換成奇偶性數組(0 = 偶,1 = 奇)
    • 再轉換成 “奇偶性是否改變” 的陣列:diff[i] = 1 if arr[i]%2 != arr[i+1]%2 else 0
  2. 找到 diff 數組中連續為 1 的段,設某段長度為 L,則該段對應的鋸齒子數組數量為 (L+1)*(L+2)//2
    • 例如 L=2(3 個元素,2 次奇偶交替),子數組數 3*4/2=6
  3. 遍歷 diff 數組,統計所有連續段的貢獻,就是最終答案。

Python 程式碼

def solution(arr):
    if not arr:
        return 0
    # 轉換為奇偶數組
    parity = [x % 2 for x in arr]
    n = len(parity)
    total = 0
    current_length = 1 # 目前連續鋸齒序列的長度
    for i in range(1, n):
        if parity[i] != parity[i-1]:
            current_length += 1
        else:
            # 結算當前段落的貢獻
            total += current_length * (current_length + 1) // 2
            current_length = 1
    # 加上最後一段的貢獻
    total += current_length * (current_length + 1) // 2
    return total

備戰心得與建議

題型熟悉度最重要 HRT、TikTok、Jane Street 這類公司的 OA 題庫重合度較高。建議大家平時多刷 CodeSignal 的 Arcade 和 Company Tagged 題目,尤其是字串、陣列、貪心、DP 四大類。

速度與準確性並重 雖然題目不難,但一定要注意邊界條件(空數組、空字串、單元素、最大值等)。我每次練習都會強制自己先寫註釋,理清楚思緒再動手。

養成每天刷題的習慣 我最近幾乎每天都做 1-2 份完整 OA(包括 HRT、TikTok、Citadel 等),熟悉了題型和節奏後,真實考試時心態會非常穩。

如果 OA 和 VO 沒把握 對於 OA 穩定性要求高、VO 壓力大的同學,可以考慮一些實戰輔助支援。Programhelp 在這方面經驗較豐富,他們的學長做過很多家大廠的 OA 和 VO 輔導,能提供針對性的思路指導。

author avatar
Jory Wang Amazon資深軟體開發工程師
Amazon 資深工程師,專注 基礎設施核心系統研發,在系統可擴充套件性、可靠性及成本最佳化方面具備豐富實戰經驗。 目前聚焦 FAANG SDE 面試輔導,一年內助力 30+ 位候選人成功斬獲 L5 / L6 Offer。
END
 0