AlgoMooc
← 返回题库

K0042. 魔法水晶的预警之声

中等通过率 33% · 提交 341 · 通过 111
哈希表滑动窗口排序

在小慕的魔法实验室里,他搭建了一套名为「星辉」的远程施法系统。系统对外开放了多个 `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

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。