← 返回博客列表 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