问题如下: 每年我都会得到N个等级(不是离散数字0-100),
一个。我需要找到一年中的最高等级。
B中。在N年结束时,我需要从所有N年的所有N ^ 2等级中返回N个最高等级。
T(i)是第i年算法的运行时间。
我需要提出一种算法/数据结构,它将做A& B in MAX(T(1),T(2),...,T(N))= O(N)。 (每年的线性工作)
O(NlogN)中的解决方案是我通过维护每年N个最大等级的最大堆和每年的最大堆得到的最低值,并删除min并插入从我们删除的年份开始的下一个。
感谢您的帮助!
答案 0 :(得分:0)
保持阵列有N * 2个位置。
在第一年,填写前N个职位。
在第二年,填补剩余的N个职位。
运行QuickSelect算法(中位数为中位数),将数组在O(N)中的N最大值和N最低值之间进行分区。
从2到N年重复。