对每种 alarmType 独立做滑动窗口限流:按时间顺序扫描告警,用队列保存该类型已被保留的时间戳。
处理时刻 t 的告警时:
window=0 时同刻已保留仍计入,故只弹出严格早于 t 且 ≤t−window 的项)。limit,抑制;否则入队并计入保留。运维平台按时间顺序上报一批告警 events。每一项是 [timestamp, alarmType]:
timestamp:告警发生时刻alarmType:告警类型保证 timestamp 非降序(可相等)。
平台要对每种类型独立做限流,规则如下(按上报顺序逐条处理):
处理某条告警,设其时刻为 t、类型为 type。只看该类型里此前已被保留的告警,统计其中时刻落在半开区间 (t−window,t] 内的条数:
limit,则本条抑制(不保留)说明:区间左开右闭,即时刻等于 t−window 的历史告警不计入窗口;时刻等于 t 的、已先处理并保留的同刻告警计入。
请返回最终保留的告警总条数。
请实现:
countKeptAlarms(events: int[][], window: int, limit: int) -> int
三行:
events,形如 [[1, 1], [2, 1], [10, 1]]window(窗口长度)limit(同类型窗口内最多保留条数)约束:
一个整数:保留条数。
输入:
[[1, 1], [2, 1], [3, 1], [10, 1]]
5
2
输出:
3
说明:
均为类型 1,window=5,limit=2。
共保留 3 条。
输入:
[[0, 2], [0, 2], [0, 3]]
0
1
输出:
2
说明:
window=0 时窗口为 (t,t],不含更早历史;但同一时刻已保留的仍计数。类型 2 同刻第一条保留、第二条达 limit=1 被抑制;类型 3 保留。共 2 条。
输入:
[]
10
3
输出:
0
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册