← 返回编程题库
coding-bucket-histogram-trade-sizes简单免费版2000ms未尝试

用右闭分桶把交易笔数归入规模档位

Trade-Size Tier Histogram via Right-Inclusive Edges

开始编码

实现 solution(trade_sizes: list[int], bin_edges: list[int]) -> list[int]。一份微观结构日终报表工具把当天正整数 trade size 按 bin_edges 中给定的 K 条严格升序正整数边界归入 K+1 个规模档位(tier)。档位约定为右闭("size <= tier-cap"),与做市/交易台按档位汇报成交量时的语义一致:

  • 桶 0: trade_size <= bin_edges[0]
  • 桶 i (1 <= i <= K-1):bin_edges[i-1] < trade_size <= bin_edges[i]
  • 桶 K: trade_size > bin_edges[K-1]

返回长度为 K + 1 的整数列表,按桶号顺序给出落入每个桶的交易笔数。

例:solution([50, 100, 250, 1000, 1500, 50000], [100, 1000, 10000]) 返回 [2, 2, 1, 1]。边界 [100, 1000, 10000] 切出四个桶:<=100(100, 1000](1000, 10000]>1000050100 进入桶 0(注意 100 与边界相等,按右闭归入这一桶);2501000 进入桶 1(1000 也是与第二条边界相等而落入桶 1);1500 进入桶 2;50000 进入桶 3。

Sentinel 与退化形状:K = 0bin_edges 为空)返回 [N],单一兜底桶装下所有交易;N = 0 返回 [0] * (K + 1),所有桶为空;若 bin_edges 非空但不严格升序(含重复或任何下降),返回 [-1] 这个单元素列表来标记非法边界契约。

预期算法是对每笔交易调用 bisect_left,整体 O(N log K);N 上限 5000、K 上限 50 时这远在预算之内,但能干净地区分"批量 bisect"与"逐笔线性扫"两种实现。

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

实践背景

某交易台日终流程上的微观结构报表工具,把当日成交按 trade size 归入若干预设流动性档位(tier)——small / mid / large / block——其档位上限按品种或场所分别配置。右闭约定 size <= tier-cap 对应交易员叙述成交流时的口径:"一百手以内算 small,一千手以内算 mid",所以恰好等于档位上限的成交属于该档而非下一档。该直方图驱动后续的按档位 fill-quality、按档位报价稳定性、post-trade impact attribution 等报表。当上游配置推送送来非单调的档位上限时,[-1] sentinel 让报表生成器静默安全地把异常状态摆到看板上,而不是默默生成一个含错的直方图。

约束条件

  • 0 <= N <= 5000,其中 N 为 trade_sizes 的长度
  • 0 <= K <= 50,其中 K 为 bin_edges 的长度
  • 1 <= trade_sizes[i] <= 1e9,每笔交易
  • 1 <= bin_edges[j] <= 1e9,每条边界;bin_edges 必须严格升序
  • 输出为 K+1 个非负整数构成的列表;非法边界的 sentinel 为单元素列表 [-1]

样例

Case 1 · statement-example: four bins right-inclusive

输入: [[50,100,250,1000,1500,50000],[100,1000,10000]]

期望: [2,2,1,1]

边界 [100,1000,10000] 切出 4 个桶;50 和 100 落入桶 0(右闭),250 和 1000 落入桶 1,1500 落入桶 2,50000 落入桶 3,故 [2,2,1,1]。

Case 2 · visible: K=0 catch-all bin

输入: [[7,12,5,9999],[]]

期望: [4]

K=0(无边界)退化为单一兜底桶,所有 4 笔都计入桶 0。

Case 3 · visible: malformed edges return [-1]

输入: [[10,20,30],[50,50,100]]

期望: [-1]

bin_edges 出现重复值 50,违反严格升序契约,返回 [-1]。

最近提交

还没有提交记录。

编码区

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

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

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

Case 1 · statement-example: four bins right-inclusive

输入: [[50,100,250,1000,1500,50000],[100,1000,10000]]

期望: [2,2,1,1]

边界 [100,1000,10000] 切出 4 个桶;50 和 100 落入桶 0(右闭),250 和 1000 落入桶 1,1500 落入桶 2,50000 落入桶 3,故 [2,2,1,1]。

Case 2 · visible: K=0 catch-all bin

输入: [[7,12,5,9999],[]]

期望: [4]

K=0(无边界)退化为单一兜底桶,所有 4 笔都计入桶 0。

Case 3 · visible: malformed edges return [-1]

输入: [[10,20,30],[50,50,100]]

期望: [-1]

bin_edges 出现重复值 50,违反严格升序契约,返回 [-1]。