小编典典

数组中每个元素右侧的最大元素

algorithm

我得到了一个数组(由n个元素组成),我必须在每个元素的右侧找到比其自身(当前元素)大的最小元素。

For example :
   Array =     {8,20,9,6,15,31}
Output Array = {9,31,15,15,31,-1}

是否可以在O(n)。?中解决此问题?我想到了从右侧遍历数组(从n-2开始) 并为其余元素构建一个平衡二进制搜索树
,因为在其中搜索立即大于当前元素的元素将是O(logn) 。

因此,时间复杂度将变为O(n *(log(n))。

有没有更好的方法来解决这个问题?


阅读 273

收藏
2020-07-28

共1个答案

小编典典

您提出的问题无法及时解决O(n),因为您可以减少对其的排序,从而实现O(n)及时的排序。说有解决这个问题的算法O(n)。设元素 a

该算法也可以用来寻找 最小 的元素 左侧 的和 较大的 (通过 反转阵列 运行算法之前)。它也可以用来寻找
最大 的元素 正确 的(或左)和 更小的一个 (由 否定要素 运行算法之前)。

因此,在算法四次运行(线性时间)后,您知道 每个
元素的右边和左边应该有哪些元素。为了在线性时间内构造排序后的数组,您需要保留元素的索引而不是值。您首先要在线性时间内跟随“大于指针”来找到最小的元素,然后在另一个方向进行另一遍以实际构建数组。

2020-07-28