替换每个数字,a [i]右侧有更高的数字,

时间:2014-01-05 11:06:23

标签: arrays algorithm

给定一个整数数组,用右边的下一个更高的数字(根据值)替换每个数字a [i],其值更接近a [i](如果不存在,则保持原样) 。)

例如。

输入 - > 3 7 5

输出 - > 5 7 5

输入 - > 3 6 2 6 4 7 1

输出 - > 4 7 4 7 7 7 1

在一次采访中询问了这个问题。

如果从右边开始并在BST中插入每个元素然后在BST中找到更接近的值,但在最坏的情况下这种方法也将是O(n ^ 2)。

有没有针对此的优化方法?

1 个答案:

答案 0 :(得分:1)

您可以为整个数字列表构建平衡的BST。然后,再次浏览列表,使用树查找下一个更大的数字。完成每个项目后,将其从树中删除。

树的深度永远不会增加,因此总体复杂度为O(n log n),用于首先构建树,每个项目的O(log n)用于查找下一个最大项目,O(log n) )用于删除当前项目。整体O(n log n),没有奇特的数据结构。