HackerRank 是很多公司的第一輪篩選平台,從大廠到量化基金再到新創都在用它做線上筆試。同樣是 HackerRank,不同公司的出題風格、時長、難度差別很大:有的考標準演算法,有的考解析與實作,有的直接上高難度 + 緊時間。如果你按同一套範本準備所有公司,很容易在最該拿分的地方失手。
這篇文章不講平台機制(那部分見我們的平台機制全解析),而是回答一個更實際的問題:哪家公司愛考哪類題,你應該怎麼分桶準備。核心是一張「公司 → 題型地圖」,配上每個桶的備考重點,最後給一段完整可執行的代表性題目解法。OA 通常是後續所有輪次的入口,筆試掛了就直接失去了面試機會,所以值得按公司精準準備。
公司 → 題型地圖(核心速查表)
| 公司 / 分桶 | 典型時長 | 高頻題型 | 備註 |
|---|---|---|---|
| 大廠:Google / Amazon / Meta | 60-90 分鐘 | 標準演算法與資料結構,中等難度 | 陣列、雜湊、圖、DP,覆蓋面廣 |
| 大廠:TikTok(SDE Intern) | 60-90 分鐘 | 滑動視窗 + 雜湊表偏多 | 字串/子陣列視窗類高頻 |
| 大廠:Uber | 60-90 分鐘 | 圖、設計類、中等演算法 | 偏工程實作感 |
| 量化:Citadel / Two Sigma | 75 分鐘左右 | 高難解析 + 最佳化,偶帶機率/數學 | 時間緊,題面長,讀題即難點 |
| 量化:Jane Street / Optiver | 60-90 分鐘 | 高難實作 + 數學建模 | 對細節與邊界要求苛刻 |
| 新創:Stripe | 90-120 分鐘 | 前綴和 + 解析 + 校驗邏輯 | 實用/實作導向,題面貼近真實業務 |
| 新創:Airbnb | 60-90 分鐘 | SQL + Python 混合資料分析 | 資料處理 + 查詢能力 |
| 新創:Palantir | 90-120 分鐘 | 資料建模 + 實作 | 偏「把複雜需求寫對」 |
說明:同一家公司不同職缺、不同批次會有浮動,上表是公開經驗的集中趨勢,用來定「主攻方向」,不是絕對規則。
一、分桶備考策略:不同公司主攻不同
大廠桶(Google / Amazon / Meta / TikTok / Uber)
大廠 OA 最標準,考的是基礎演算法與資料結構的熟練度,難度多為中等。備考重點:
- 打牢五大高頻:陣列/雜湊、雙指標/滑窗、DP、圖(BFS/DFS)、堆積/優先佇列。
- TikTok SDE Intern 尤其偏滑動視窗 + 雜湊表,練熟「最長不重複子字串」「視窗內最多 K 種元素」這類題就能覆蓋很大一部分。
- Amazon 常帶一點 OOD/模擬;Uber 偏圖與工程實作。
- 目標是看到題能在 10 分鐘內定位到套路,把時間留給邊界和最佳化。
量化金融桶(Citadel / Two Sigma / Jane Street / Optiver)
量化 OA 的特點是高難度 + 長題面 + 緊時間(Citadel/Two Sigma 常見 75 分鐘)。備考重點:
- 先練「讀題拆解」:題面往往包裹在很長的業務/數學描述裡,能快速提煉出真正的演算法核心是第一關。
- 主攻高難解析、複雜模擬、最佳化類題,外加基礎機率與期望、組合數學。
- 訓練在時間壓力下先寫出正確暴力解拿分,再迭代最佳化,而不是死磕最佳解到逾時。
新創桶(Stripe / Airbnb / Palantir)
新創偏實用與實作,題面貼近真實業務。備考重點:
- Stripe:前綴和 + 字串解析 + 校驗邏輯高頻,題目常要求你解析一段輸入、按規則校驗並彙總,程式碼量偏大,練習「把需求一次寫對」。
- Airbnb:SQL + Python 混合的資料分析,複習彙總、視窗函式、join,以及用 Python 做資料清洗與統計。
- Palantir:資料建模 + 實作,重點是把複雜需求翻譯成清晰正確的程式碼結構。
二、代表題精講:視窗內最多 K 種不同元素
TikTok/大廠桶的高頻代表題:給一個陣列和整數 K,求「最多包含 K 種不同元素的最長連續子陣列」的長度。它是滑動視窗 + 雜湊表的經典組合,值得吃透。
思路
- 用一個雜湊表記錄當前視窗內每種元素的出現次數,
right指標不斷向右擴張。 - 當視窗內不同元素種類超過 K 時,
left指標右移收縮,直到種類數重新 ≤ K。 - 每一步用當前視窗長度更新答案。每個元素最多進出視窗各一次,整體線性。
Python 解法(完整可執行)
import sys
from collections import defaultdict
def longest_subarray_k_distinct(nums, k):
# 視窗內每種元素的計數;left 為視窗左邊界
count = defaultdict(int)
left = 0
best = 0
for right, x in enumerate(nums):
count[x] += 1
# 種類超過 k 時,從左側收縮視窗
while len(count) > k:
count[nums[left]] -= 1
if count[nums[left]] == 0:
del count[nums[left]]
left += 1
best = max(best, right - left + 1)
return best
def main():
data = sys.stdin.read().split()
if not data:
return
# 輸入:第一行 n k,第二行 n 個整數
n, k = int(data[0]), int(data[1])
nums = list(map(int, data[2:2 + n]))
print(longest_subarray_k_distinct(nums, k))
if __name__ == "__main__":
main()
用範例 n=7 k=2、陣列 1 2 1 2 3 3 4 跑,答案是 4(子陣列 1 2 1 2)。若無 stdin,可直接呼叫 longest_subarray_k_distinct([1,2,1,2,3,3,4], 2) 驗證。
時間複雜度:O(n),每個元素最多進出視窗一次。 空間複雜度:O(k),雜湊表最多存 k+1 種元素。
三、按桶排一份兩週計畫
| 階段 | 大廠桶 | 量化桶 | 新創桶 |
|---|---|---|---|
| 第 1 週 | 陣列/雜湊/滑窗基礎 | 高難解析 + 機率入門 | 前綴和/解析/SQL 基礎 |
| 第 2 週 | 圖 + DP + 全真限時模擬 | 限時最佳化 + 長題面拆解模擬 | 業務型實作 + 資料分析模擬 |
無論哪個桶,最後都要做限時全真模擬:按目標公司的時長與題型跑一遍,把節奏、讀題、邊界都練到位。HackerRank 按全部隱藏測資計分(涵蓋執行時間、邊界、記憶體),目標是盡量把每題的測資全過。
如果你想更高效,我們的 OA輔助 / OA代面 服務提供按公司做題型預測、完整解法 + 複雜度講解,以及即時陪練/協作輔導,讓你的 OA 和後續 VO 風格保持一致,是從筆試到面試的端到端陪跑。
FAQ
Q1:HackerRank 和 LeetCode 有什麼區別? LeetCode 多是給好函式簽名、你只填核心邏輯;HackerRank 很多題要自己讀 stdin、自己處理輸入輸出,題面也更貼近各公司業務風格。備考時除了刷演算法,也要練 IO 範本與讀題拆解。
Q2:哪些公司用 HackerRank? 覆蓋很廣:大廠如 Google、Amazon、Meta、TikTok、Uber;量化金融如 Citadel、Two Sigma、Jane Street、Optiver;新創如 Stripe、Airbnb、Palantir 都常用它做第一輪線上筆試。具體題型見上文地圖表。
Q3:OA 一定要全部測資都過嗎? HackerRank 按通過測資數計分,部分正確也有分,但分數越高越安全。建議先 AC 掉範例和簡單 case 拿基礎分,再衝隱藏測資;能全過當然最好,尤其量化桶競爭激烈時。
Q4:不同公司差別真的大到要分開準備嗎? 主攻方向確實要分:TikTok 偏滑窗雜湊、Stripe 偏前綴和解析、量化偏高難最佳化。基礎演算法是共同底座,但把有限時間按目標公司的高頻題型傾斜,性價比最高。
Q5:時間緊只來得及準備一類怎麼辦? 先確定你最想去的公司屬於哪個桶,按那個桶主攻。大廠桶的滑窗+雜湊+DP 覆蓋面最廣,是通用性最強的起點;有餘力再補量化的高難解析或新創的解析/SQL。
正在準備 HackerRank OA?
不確定目標公司愛考哪類題、想要按公司做題型預測並配完整解法講解,可以聊聊我們的 OA輔助 / OA代面 方案——從公司題型地圖到即時陪練,幫你把 OA 和後續 VO 一起準備到位。
立即加入微信 Coding0201,獲取按公司客製的題型清單與備戰計畫。
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy