给定一个整数数组,用右边的下一个更高的数字(根据值)替换每个数字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)。
有没有针对此的优化方法?
答案 0 :(得分:1)
您可以为整个数字列表构建平衡的BST。然后,再次浏览列表,使用树查找下一个更大的数字。完成每个项目后,将其从树中删除。
树的深度永远不会增加,因此总体复杂度为O(n log n),用于首先构建树,每个项目的O(log n)用于查找下一个最大项目,O(log n) )用于删除当前项目。整体O(n log n),没有奇特的数据结构。