algorithm - 从现有数组构造一个数组

标签 algorithm heap

给定一个整数数组A[1...n-1],其中N是数组A的长度。构造一个数组B 这样 B[i] = min(A[i], A[i+1], ..., A[i+K-1]),其中 K 会给出。数组 B 将有 N-K+1 个元素。

我们可以使用最小堆来解决问题 为 k 个元素构造最小堆 - O(k)。对于每个下一个元素,删除第一个元素并插入新元素并堆化。

Hence Worst Case Time - O( (n-k+1)*k ) + O(k) Space - O(k)

我们可以做得更好吗?

最佳答案

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

或者,如果我们遍历输入数组并将每个元素放入大小为“k”的最小队列,我们​​可以在 O(n) 时间内完成。 Min-queue 是一个可以在 O(1) 时间内执行 find-min 的队列。它可以实现为一对最小堆栈。参见 this answer了解详情。

关于algorithm - 从现有数组构造一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159298/

相关文章:

c++ - 堆问题

c++ - 使用 C++ 标准库以对数时间进行 Heapify

python - 了解 C++ 中的 pop_heap 以便在 Python 中实现

sql - Stackoverflow 的相关问题

algorithm - 如何利用 GPS 数据流预测预计到达时间 (ETA)?

algorithm - 哪种排序数据结构针对查找范围内的项目进行了优化?

algorithm - treap数据结构中的优先级生成

algorithm - 混合数据结构对效率的好处

java - 从多个列表生成所有组合

algorithm - 堆排序运行时间