【发布时间】:2012-08-24 18:52:26
【问题描述】:
我有输入数组 A
A[0], A[1], ... , A[N-1]
我想要函数 Max(T,A),它返回 B 表示 A 上大小为 T 的前一个移动窗口的最大值,其中
B[i+T] = Max(A[i], A[i+T])
通过使用最大堆来跟踪当前移动窗口 A[i] 到 A[i+T] 的最大值,该算法产生 O(N log(T)) 最坏情况。
我想知道有没有更好的算法?也许是 O(N) 算法
【问题讨论】:
-
如果
A是固定的,而T变化,你可以做一个O(N*log(N))准备,然后对于每个T,你可以在O(N) 时间内得到B。 -
@Topro 听起来不错!你能把准备步骤放在答案上吗?谢谢!
标签: arrays algorithm heap max min