我怎样才能在每年的线性时间内做到这一点?
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个位置的数组。
第一年,填前N个职位
第二年,填补剩余的N个职位。
运行 QuickSelect 算法(中位数的中位数)在 O(N) 中将数组划分为最大的 N 个和最小的 N 个。
从 2 开始重复直到第 N 年。
问题如下: 每年我得到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个位置的数组。
第一年,填前N个职位
第二年,填补剩余的N个职位。
运行 QuickSelect 算法(中位数的中位数)在 O(N) 中将数组划分为最大的 N 个和最小的 N 个。
从 2 开始重复直到第 N 年。