我怎样才能在每年的线性时间内完成这项工作?

时间:2015-08-28 21:49:30

标签: algorithm data-structures asymptotic-complexity

问题如下: 每年我都会得到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并插入从我们删除的年份开始的下一个。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

保持阵列有N * 2个位置。

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

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

  3. 运行QuickSelect算法(中位数为中位数),将数组在O(N)中的N最大值和N最低值之间进行分区。

  4. 从2到N年重复。