在一次采访中有人问我:
从最大堆中获取最小元素的最佳时间复杂度是多少?
假定堆大小已知并且使用数组将堆实现为二进制堆,我将其答复为O(1)。按照我的假设,最小值为heap_array[heap_size]。
heap_array[heap_size]
我的问题是这个答案是否正确。如果没有,正确答案是什么?
我的问题是这个答案是否正确。
不,那是不正确的。您唯一的保证是, 每个节点都包含其下面子树的最大元素 。换句话说, 最小元素可以是 树中的 任何叶子 。
如果不是,正确的答案是什么?
正确答案是O(n)。在每个步骤中,您都需要遍历左右两个子树,以搜索最小元素。实际上,这意味着您需要遍历所有元素以找到最小值。