使用现有数组构造数组

时间:2012-06-22 15:27:31

标签: algorithm heap

给定一个整数数组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)

我们可以做得更好吗?

1 个答案:

答案 0 :(得分:1)

如果在OP的算法中我们将昂贵的“堆化”程序改为更便宜的“upheap”或“downheap”,我们可以做得更好。这给出了O(n * log(k))时间复杂度。

或者,如果我们遍历输入数组并将每个元素放入大小为'k'的最小队列,我们​​可以在O(n)时间内完成。最小队列是一个可以在O(1)时间内执行find-min的队列。它可以实现为一对最小堆栈。有关详细信息,请参阅this answer