OA辅助 / 面试训练复盘

Snowflake OA 面试真题解析:Find Number of Pairs and Tuples Within a Threshold

给定两个有序数组 A、B 和整数 D,求 |A[i] - B[j]| <= D 的配对数量;追问扩展到元组。利用有序性双指针统计,避免暴力枚举。

双指针:阈值内配对计数:数组 A、数组 B、阈值 D。原创主题示意图。
训练主题配图 · 非客户现场证明

题目描述

给定两个有序数组 A、B 和一个整数 D,求满足 |A[i] - B[j]| <= D 的配对 (i, j) 数量。追问通常是把两个数组扩展到更多个,统计满足阈值关系的元组。

解题思路

对每个 A[i],在 B 中找出满足 B[j] >= A[i] - D 的下界,以及 B[j] <= A[i] + D 的上界,中间的元素都合法。由于 B 有序,用二分或双指针维护一个单调窗口,统计落入 [A[i]-D, A[i]+D] 的 B 元素个数。

import bisect

def count_pairs(A, B, D):
    ans = 0
    for a in A:
        lo = bisect.bisect_left(B, a - D)
        hi = bisect.bisect_right(B, a + D)
        ans += hi - lo
    return ans

复杂度与易错点

对每个 A[i] 二分,时间 O(m log n);若用双指针,可做到 O(m + n)。注意使用 bisect_left 处理等于下界的元素、bisect_right 处理等于上界的元素,避免边界漏计或重复计。

FAQ

为什么下界用 bisect_left、上界用 bisect_right?

|A[i] - B[j]| <= D 是闭区间,等于两端边界的元素都应计入,所以下界取左闭、上界取右闭。

参考来源

联系 VOPathway

如果你希望把这套方法用于自己的 OA 或 VO 准备,可以把目标岗位、当前阶段、面试时间和主要难点发给 VOPathway,我们会据此安排针对性的练习与复盘。

  • 微信:Coding0201
  • 邮箱:[email protected]
  • Telegram:@OAVOProxy
  • WhatsApp:+86 178 6396 8105

可提供 OA辅助、OA辅导、VO辅助与 VO辅导。文章用于训练参考,不代表相关公司的官方流程;实际安排请以候选人收到的通知为准。

每一步,都更接近准备充分的自己。

本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。

预约一次训练复盘 ↗