本题是经典的扫描线 / 差分思想:半开区间 [s, e) 在时刻 s 开始占用、在时刻 e 释放。
把所有 starts 与 ends 分别排序,用双指针扫描:
+1,并更新答案。-1)。半开区间下,s == e 时必须先结束再开始,因此比较用严格小于。直播平台要统计同一时刻最多有多少场预约直播同时进行,以便扩容带宽。每场直播占用半开时间区间 [s,e),即包含时刻 s、不包含时刻 e。
给定两个等长数组 starts、ends,第 i 场直播为 [starts[i],ends[i])。求任意时刻的最大并发场次数。
请实现:
peakConcurrent(starts: int[], ends: int[]) -> int
两行:
starts(形如 [1, 2, 3])ends(形如 [3, 5, 4]),与 starts 等长约束:1≤n≤104,n=starts.length;0≤starts[i]<ends[i]≤105。
一个整数:峰值并发场次数。
输入:
[1, 2, 3]
[3, 5, 4]
输出:
2
说明:
三场为 [1,3)、[2,5)、[3,4)。时刻 2 起前两场重叠,并发为 2;3 时刻第一场刚结束、第三场刚开始,并发仍为 2,从未到 3。
输入:
[1, 2]
[2, 3]
输出:
1
说明:
[1,2) 与 [2,3) 在 2 处首尾相接、互不重叠。
输入:
[0, 0, 0]
[10, 10, 10]
输出:
3
说明:
三场完全重叠,峰值为 3。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册