OA辅助 / 面试训练复盘

Stripe OA 面试真题解析:按属性匹配、加权匹配与间接关联商户

Stripe OA 的商户匹配题分三部分:直接按共享属性匹配、按置信度加权、以及通过属性链间接关联的商户。用属性到商户的倒排索引做直接匹配,用并查集处理间接关联。

商户匹配:直接、加权、间接:目标商户、属性匹配、间接关联。原创主题示意图。
训练主题配图 · 非客户现场证明

题目描述

Part 1 直接匹配:给定目标商户,返回所有与它共享至少一个相同属性值的商户。Part 2 加权匹配:按共享属性数量或置信度给匹配结果打分排序。Part 3 间接关联:两个商户即使不共享属性,只要通过若干次共享属性形成链,也算关联。

解题思路

直接匹配用「属性值 → 商户集合」的倒排索引,一次查表即可。间接关联是图连通性:把「共享同一属性值」的两两商户连边,用并查集把同一连通分量的商户归为一组。加权匹配则在直接匹配基础上按共享属性数排序。

class DSU:
    def __init__(self, n):
        self.p = list(range(n))
    def find(self, x):
        while self.p[x] != x:
            self.p[x] = self.p[self.p[x]]
            x = self.p[x]
        return x
    def union(self, a, b):
        ra, rb = self.find(a), self.find(b)
        if ra != rb:
            self.p[ra] = rb

def indirect_groups(attr_values):
    groups = {}
    for mid, attrs in enumerate(attr_values):
        for a in attrs:
            groups.setdefault(a, []).append(mid)
    dsu = DSU(len(attr_values))
    for mids in groups.values():
        for i in range(1, len(mids)):
            dsu.union(mids[0], mids[i])
    result = {}
    for mid in range(len(attr_values)):
        result.setdefault(dsu.find(mid), []).append(mid)
    return list(result.values())

复杂度与易错点

倒排索引构建 O(总属性数),并查集操作近似 O(α(n))。注意同一商户重复出现的属性不要重复连边;Part 3 的「关联」是传递闭包,不能用一次共享属性的直接邻居代替。

FAQ

间接关联为什么不能只查直接邻居?

关联关系可传递:A 和 B 共享属性,B 和 C 共享属性,A 与 C 虽无共同属性也算关联,必须用并查集或 BFS 求连通分量。

参考来源

联系 VOPathway

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

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

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

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

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

预约一次训练复盘 ↗