用右闭分桶把交易笔数归入规模档位
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]、>10000。50 和 100 进入桶 0(注意 100 与边界相等,按右闭归入这一桶);250 和 1000 进入桶 1(1000 也是与第二条边界相等而落入桶 1);1500 进入桶 2;50000 进入桶 3。
Sentinel 与退化形状:K = 0(bin_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 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
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]。