【发布时间】:2012-07-19 00:17:06
【问题描述】:
我有 fifo 查询我放置和弹出双打的位置。 每次更新后,我需要最大值和最小值。我不需要查询中这些值的位置(或索引)。 如何有效地做到这一点? log(N) 甚至可能是 O(1)?
更新:找到这个Implement a queue in which push_rear(), pop_front() and get_min() are all constant time operations
【问题讨论】:
-
如果您想在每次更新时跟踪堆栈中的最大值和最小值,那么每次更新都会进行两次计算,因此需要 O(n) 时间。
-
@ReyGonzales O(N) 计算量太大。一定有更好的东西。
-
如果你检查 n 个元素,那么无论如何你都会有 O(n) 时间。
-
@ReyGonzales 我不需要总是检查 n 个元素。在大多数情况下,最大值和最小值根本不会改变,我根本不需要检查任何东西,因为删除的元素既不是最大值也不是最小值
-
虽然您的最大值或最小值在更新时可能不会改变,但您仍需要将最新值与最大值和/或最小值进行比较。
标签: algorithm