【发布时间】:2016-07-12 05:57:10
【问题描述】:
给定一个数组,对于每个元素,我需要找到给定元素右侧大于当前元素的最小元素。
数学上,
对于数组A 中的每个索引i,我需要找到索引j 这样
A[j] > A[i]
j > i
A[j] - A[i] is minimum
我需要为每个索引 i 找到 j
蛮力解决方案是O(n^2),我希望做得更好。我在想O(n log n) 解决方案可以使用自平衡 BST,但这似乎相当复杂。此外,我需要O(n) 解决方案。
这个问题有O(n) 解决方案吗?有没有证据证明下界是O(n log n)?
【问题讨论】:
-
您需要查找每个索引吗?还是只有给定的索引?
-
所以输入是
A和i,所需的输出是j,s.t.规定的条件成立吗? -
所有索引都需要它。不仅仅是一个。输入是
A,输出是一个数组B,其中包含所有索引ji -
你的蛮力尝试是什么样的?
-
从索引 i+1 开始,一直遍历到结束,跟踪大于
A[i]的最小元素。
标签: arrays algorithm asymptotic-complexity