← 返回编程题库
coding-first-order-id-with-freq-k简单免费版2000ms未尝试

成交审计频次探针:定位首个生命周期 FIX 事件数恰为 k 的 order ID

Fills-Audit Frequency Probe: First Order-ID Whose Lifecycle Hits Exactly k FIX Events

开始编码

实现 solution(order_ids: list[int], k: int) -> int。给定一段按 FIX 行情到达顺序排列的整型 order ID 列表 order_ids 与一个正整数 k,返回**整段输入中其值恰好出现 k 次的元素中位置最早的那个的 0-based 下标**。若没有任何 id 总次数等于 k,返回 -1

例:solution([101, 202, 303, 101, 404], 2) 返回 0id=101 出现 2 次(index 0 与 3),202303404 各 1 次;满足计数恰为 k 约束的最早下标是 0

几处细节:输入为空返回 -1k = 1 退化为"首个仅出现一次的 id";k 大于任何 id 实际次数时返回 -1;若多个不同 id 都恰好出现 k 次,返回最先出现者的下标;若同一个 id 恰好出现 k 次,应返回它的首次出现位置(后续位置虽共享相同计数,但下标更大)。

两遍 O(N) 配方:先用一遍 Counter 统计每个 id 的总次数,再从左到右扫描,遇到第一个总次数为 k 的位置即返回。朴素地对每个位置都重新数一遍是 O(N^2),在隐藏的上限用例上会超时。

实现细节由 stubs/stub.py 提供。

实践背景

收盘后的成交审计会通过扫描整个交易日的成交流水来定位 FIX 事件数异常的 order 生命周期。干净成交在 tape 上恰好留下一条事件(k=1);amend 后成交会留下两条(k=2);多次 cancel/replace 的"话痨"问题单则会累积到三条以上。通过把 k 参数化,审计工具可以在不重建索引的情况下回答"今天最早的那个事件数等于 k 的 id 是哪一条"——交易台关心的是最早出现者,因为同根因诱发的下游问题单往往滞后;解决最早一条往往能直接锁定根因。返回最早的下标而非仅 id,是为了方便调用方直接跳到流水上下文行,无需二次查询。

约束条件

  • 0 <= len(order_ids) <= 10000,其中 len(order_ids) 是 solution(order_ids, k) 的输入长度
  • 每个 order_ids[i] 是 [-1_000_000_000, 1_000_000_000] 范围内的 32 位有符号整数
  • 1 <= k <= len(order_ids) + 1(允许 k 超过任何已实现的次数,此时返回 -1)
  • 若不存在任何 id 总次数恰为 k,返回 -1
  • 输出为 0-based 下标的整数,使用精确比对

样例

Case 1 · statement-example: k=2 first amended id at index 0

输入: [[101,202,303,101,404],2]

期望: 0

id=101 出现 2 次(index 0 与 3),id=202/303/404 仅 1 次;最早满足出现次数恰为 2 的下标是 0。

Case 2 · visible: k=1 picks the first non-repeating id

输入: [[7,7,9,8,9],1]

期望: 3

id=8 仅出现 1 次,对应 index 3;id=7 与 id=9 均出现 2 次,不计入。

Case 3 · visible: no id has count k returns -1

输入: [[1,2,3,1,2,3],1]

期望: -1

所有 id 都出现 2 次,没有任何 id 恰好出现 1 次,返回 -1。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · statement-example: k=2 first amended id at index 0

输入: [[101,202,303,101,404],2]

期望: 0

id=101 出现 2 次(index 0 与 3),id=202/303/404 仅 1 次;最早满足出现次数恰为 2 的下标是 0。

Case 2 · visible: k=1 picks the first non-repeating id

输入: [[7,7,9,8,9],1]

期望: 3

id=8 仅出现 1 次,对应 index 3;id=7 与 id=9 均出现 2 次,不计入。

Case 3 · visible: no id has count k returns -1

输入: [[1,2,3,1,2,3],1]

期望: -1

所有 id 都出现 2 次,没有任何 id 恰好出现 1 次,返回 -1。