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