【发布时间】:2011-06-26 09:57:06
【问题描述】:
给定一个数组A[1..n],我们想要计算另一个数组B[1..n],使得B[i] 存储最接近A[i] 左侧的元素,该元素小于A[i]。
时间复杂度应该是O(n)。
(对于i>1,如果左边没有这么小的元素,那么B[i]只包含A[i]和B[1]=A[1]。)
例子:
输入:6,9,12,17,11
输出:6,6,9,12,9
我正在考虑实现一个堆栈,
将A[1] 放入B[1],然后推入堆栈。
用于填充B[i],将A[i] 与堆栈元素进行比较并弹出直到你得到更小的元素。
最后将A[i] 推入堆栈。
上述方法是否正确,是否有更便宜的解决方案?
【问题讨论】:
-
你的意思是:'到 A[i] 的 left'。如果没有这样的元素,您还必须说出您想要的内容(例如,对于您的示例中的 B[1],如果没有更小的元素,则对于 i>1)。
-
这个问题似乎不明确。正如 TonyK 指出的那样,您的示例不符合要求,此外,不清楚 B[0] 应该是什么,因为 A 中没有小于 6 的元素。请先澄清问题描述。
-
请让我知道它是否仍然模棱两可。我从右到左更改了。我认为现在序列很好。让 B[1] 成为 A[1] 只是因为它没有剩下的元素。