该题目要求模拟一个具有固定容量的定时器系统,根据任务的超时时刻和添加顺序,决定最终保留哪些任务,并输出最后超时任务的索引
创造一个优先队列,然后枚举每一个超时任务:
1.队列的大小<n,直接进队
2.队列的大小>=n,如果新任务的超时时间小于或等于队首的超时时间,则将队首任务移除,并将新任务插入队列。 如果新任务的超时时间大于队首的超时时间,则丢弃新任务。
有这样一个定时器系统:
(1)该系统精度为1刻度、可容纳n个超时任务(即容量为n);
(2)每个任务里包含该任务超时时刻t(当系统时钟到达t时,该任务开始执行),t为正整数;
(3)同一时刻超时的任务按照加入系统的先后顺序依次执行超时任务;
(4)当定时器系统中任务数不足n个时,可直接添加定时任务;
(5)当定时器系统中任务数达到n个时,假定待添加任务的超时时刻为ti,系统中最后执行的任务的超时时刻为tj;
如果ti>tj,丢弃待添加的任务;否则丢弃系统中最晚执行的超时任务,并将待添加任务加入系统中。
现给定该定时器系统容量n,短时内(不到1刻度)依次向该定时器系统添加m个定时任务tasks,假定当前时钟为0时刻,即向该定时器系统添加的任务都是尚未超时的任务。
请输出该定时器系统中最后超时的任务索引号,其中索引号是指:当前task在tasks中的下标(下标从0开始计);如果多个任务同时超时,请输出最大的索引号。
第一行:定时器系统容量n;1<=n<=103
第二行:定时任务数m;1<=m<=106
第三行:定时任务列表内容tasks,每个数据通过空格隔开;1<=tasks[i]<=105。
输出最后超时的任务索引号
输入
2
12
1 2 3 4 6 19 20 21 22 23 25 1
输出
11
说明
定时器系统容量为2,最多容纳2个定时任务,因此最终定时器里只会存在两个任务:
分别是1(索引号0)、1(索引号11),这两个任务同时超时,题目要求返回更大的索引,因此返回11
输入
1
2
10 2
输出
1
说明
定时器系统容量为1,最多容纳1个定时任务,因此最终定时器里只会存在1个任务:
2:
2对应索引号为1,因此返回1
输入
20
5
1 2 3 4 5
输出
4
说明
定时器系统容量为20,最多容纳20个定时任务,而添加的任务数为5,没有超过定时器系统规格,因此最终定时器里会存在以下任务:1 2 3 4 5;
5最晚超时,因此返回5对应的下标4