我怎样才能在每年的线性时间内做到这一点?

How can I do it in linear time for every year?

问题如下: 每年我得到N个成绩(不是离散数字0-100),

一个。我需要找到当年的最高成绩。

乙。在 N 年结束时,我需要 return 所有 N 年的所有 N^2 年级中的 N 个最高分。

T(i) 是算法在第 i 年的运行时间。

我需要提出一个 algorithm/data 结构,它将在 最大值(T(1),T(2),...,T(N))= O(N)。 (每年线性工作)

O(NlogN) 中的解决方案是我通过维护每年的 N 个最大成绩的最大堆和每年的最大堆得到的最低值,并删除 min 并插入我们从哪一年开始的下一个行删除。

感谢帮助!

保留一个有N*2个位置的数组。

  1. 第一年,填前N个职位

  2. 第二年,填补剩余的N个职位。

  3. 运行 QuickSelect 算法(中位数的中位数)在 O(N) 中将数组划分为最大的 N 个和最小的 N 个。

  4. 从 2 开始重复直到第 N 年。