给定一个整数数组A[1...n-1]
,其中N
是数组A的长度。构造一个数组B
,使得B[i] = min(A[i], A[i+1], ..., A[i+K-1])
,其中K
将是{{1}}给出。数组B将具有N-K + 1个元素。
我们可以使用min-heap解决问题为k个元素构造min-heap - O(k)。对于每个下一个元素,删除第一个元素并插入新元素并堆化。
因此最坏情况时间 - O((n-k + 1)* k)+ O(k)空间 - O(k)
我们可以做得更好吗?
答案 0 :(得分:1)
如果在OP的算法中我们将昂贵的“堆化”程序改为更便宜的“upheap”或“downheap”,我们可以做得更好。这给出了O(n * log(k))时间复杂度。
或者,如果我们遍历输入数组并将每个元素放入大小为'k'的最小队列,我们可以在O(n)时间内完成。最小队列是一个可以在O(1)时间内执行find-min的队列。它可以实现为一对最小堆栈。有关详细信息,请参阅this answer。