AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0042. 魔法水晶的预警之声

中等通过率 32% · 提交 340 · 通过 110
哈希表滑动窗口排序

在小慕的魔法实验室里,他搭建了一套名为「星辉」的远程施法系统。系统对外开放了多个 `Test` 法术接口,供其他魔法师调用。每一次调用都会被记录在一份星辉日志中。每条记录为两个整数 `time` 和 `interfaceId`,表示某个法术接口 `interfaceId` 在时间 `time` 被调用了一次。 作为系统的维护者,小慕需要检查哪些法术接口存在异常高频调用行为。给定一个时间窗口长度 `timeSegment`,如果某个法术接口在一个 内被调用的次数不少于 `minLimits` 次,小慕就认为该接口是,可能被用于非法法术实验。 请你帮小慕找出所有满足条件的高频接口编号,并按升序输出。如果没有找到任何高频接口,请输出一个 `-1`。

提示:带虚线的词点一下有通俗解释。

输入描述

- 第一行一个整数 `n`,表示调用记录的数量。 - 接下来 `n` 行,每行两个整数 `time` 和 `interfaceId`,表示一次接口调用。 - 接下来一行一个整数 `timeSegment`,表示时间窗口长度。 - 最后一行一个整数 `minLimits`,表示窗口内最小调用次数。 满足: - `1 <= n <= 10^5` - `0 <= time <= 10^6` - `0 <= interfaceId <= 10^5` - 所有 `time` 保证非递减 - `1 <= timeSegment <= 10^5` - `1 <= minLimits <= n`

输出描述

- 若存在高频接口,输出一行若干个升序排列的接口编号,以空格分隔。 - 若不存在,输出`-1`。

示例

示例 1

输入

8
0 1
0 10
9 1
10 10
20 3
25 3
100 3
100 3
10
2

输出

1 3

说明:- 接口 `1`:在时间窗口 `[0, 10)` 中被调用两次(时间为 `0` 和 `9`),满足条件; - 接口 `3`:在时间窗口 `[100, 110)` 被调用两次(时间为 `100`, `100`),也满足条件; - 接口 `10`:两次调用时间为 `0` 和 `10`,不在同一个窗口,不满足条件。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
时间窗口与高频接口示例 0 9 10 20 100 窗口 [0,10) 接口1 接口1 接口10 接口10 窗口 [100,110) 接口3 接口3 接口1 (2次在窗口内) 接口10 (不在同一窗口) 接口3 (2次在窗口内)
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法水晶的预警之声」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。