含 FIX 会话重配延迟的最小路由器数
Minimum Routers with FIX-Session Setup Delay
开始编码实现 solution(start_ms: list[int], end_ms: list[int], setup_delay_ms: int) -> int。两个等长数组描述 N 个计划好的子单上场区间:第 i 个区间为 [start_ms[i], end_ms[i]],满足 start_ms[i] <= end_ms[i]。每台路由器同一时刻只能承载一个区间;某台路由器在时刻 t 完成一个区间后,FIX 会话重配延迟使它在 t + setup_delay_ms 之前不可用。返回**把全部 N 个区间排满所需的最少路由器数**——同一台路由器上的相邻区间既不能重叠,也不能过近。
空输入(N == 0)返回 0;单区间永远返回 1;零时长探针(start_ms[i] == end_ms[i])仍然占用一台路由器,并在触发后继续消耗 setup_delay_ms 冷却时间。当 setup_delay_ms == 0 时退化为经典最小房间数基线——刚在 t 完成的路由器可以立刻接一个 start = t 的区间。当 setup_delay_ms > 0 时答案可能严格更大。
例
solution([0, 40, 80], [40, 80, 120], 10) 返回 2。按 start_ms 升序扫描(已是升序),用一个最小堆维护各路由器的下次可用时刻。
- 取
(0, 40):堆为空,压入40 + 10 = 50。堆 =[50]。 - 取
(40, 80):堆顶最小可用时刻50 > 40,要新开一台路由器并压入80 + 10 = 90。堆 =[50, 90]。 - 取
(80, 120):堆顶最小可用时刻50 <= 80,复用并压入120 + 10 = 130。堆 =[90, 130]。
堆终态大小为 2,故答案为 2。若把 setup_delay_ms 改成 0,同样的输入会返回 1(每个区间结束的瞬间下一个区间正好开始,单台路由器接力两次即可)——这正是 setup-delay 参数改变最优值的典型情形。
实现细节由 stubs/stub.py 提供。
实践背景
子单路由产能规划器:交易台对当天的子单上场区间已有大致排程,每台 FIX 路由器在同一会话上接连承载两个区间之间需要一段固定的重配冷却(重新认证场内子账户、清空限速令牌桶等)。"最少路由器数"是排程不丢单所需的会话热备下限——配额不够,至少有一个计划子单会错过自己的窗口。规划侧通常把这个数字当作切片器跑之前的硬可行性闸——一旦超过交易台分配到的 FIX 会话上限,要么松动排程,要么向上申请追加会话。setup_delay_ms = 0 是无重配代价的乐观基线;现实中正向的 setup_delay 会把"恰好 end == next_start 紧贴"的两个区间从可共享变为不可共享,从而把下限往上推一格。
约束条件
- 0 <= N <= 5000,其中 N == len(start_ms) == len(end_ms);N=0 返回 0
- 0 <= start_ms[i] <= end_ms[i] <= 10^9(允许 start == end 的零时长探针)
- 0 <= setup_delay_ms <= 10^9(非负整数,FIX 会话重配延迟)
- setup_delay_ms == 0 退化为经典最小房间数基线;setup_delay_ms > 0 时答案可能严格更大——原本 end == next_start 紧贴的两个区间不再能共享路由器
- 输出是把全部 N 个区间分配到路由器、保证同一路由器上的区间既不重叠也不过近所需的最少路由器数
样例
Case 1 · statement-example: setup=10 forces K=2 on three back-to-back intervals
输入: [[0,40,80],[40,80,120],10]
期望: 2
三个区间 (0,40),(40,80),(80,120) 紧贴;setup=10 使前后两段不能共享路由器,第二个区间需要新开一台;终态 K=2。
Case 2 · visible: same intervals with setup=0 reduce to LC253 baseline K=1
输入: [[0,40,80],[40,80,120],0]
期望: 1
同样三个紧贴区间,setup=0 时一台路由器可以接力到底,K=1,体现了 setup_delay 是真正的差异化参数。
Case 3 · visible: three fully overlapping intervals always need 3 routers
输入: [[0,1,2],[10,10,10],0]
期望: 3
三个区间在 [2,10] 段上完全重叠,必须各自占用一台路由器;setup_delay 在此处不起作用,K=3。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: setup=10 forces K=2 on three back-to-back intervals
输入: [[0,40,80],[40,80,120],10]
期望: 2
三个区间 (0,40),(40,80),(80,120) 紧贴;setup=10 使前后两段不能共享路由器,第二个区间需要新开一台;终态 K=2。
Case 2 · visible: same intervals with setup=0 reduce to LC253 baseline K=1
输入: [[0,40,80],[40,80,120],0]
期望: 1
同样三个紧贴区间,setup=0 时一台路由器可以接力到底,K=1,体现了 setup_delay 是真正的差异化参数。
Case 3 · visible: three fully overlapping intervals always need 3 routers
输入: [[0,1,2],[10,10,10],0]
期望: 3
三个区间在 [2,10] 段上完全重叠,必须各自占用一台路由器;setup_delay 在此处不起作用,K=3。