arrays - 将每个数字 a[i] 替换为其右侧的下一个更高的数字,

标签 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)。

有什么优化方法吗?

最佳答案

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

树的深度永远不会增加,所以首先构建树的总复杂度为 O(n log n),为找到下一个最大的项目每个项目的 O(log n),以及 O(log n ) 用于删除当前项目。总体 O(n log n),没有花哨的数据结构。

关于arrays - 将每个数字 a[i] 替换为其右侧的下一个更高的数字,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20932815/

相关文章:

php - 序列化数组以将它们存储在数据库中有什么意义?

java - 数组错误(java)

javascript - JavaScript 中的扁平化数组 - 需要解释

python - 当函数中有循环时将递归转换为迭代

algorithm - 分配首选项

c# - 如何就地重新排序数组以将偶数索引项放在奇数之前?

javascript - 在 JavaScript 中打包二进制数据

c++ - Minimax 算法中的线程

algorithm - 给定一个未排序的整数数组 A,返回一个数组 B,其中 B[i] 是 A[j] 的数量,使得 A[i] > A[j] 而 i < j

Java - 用反斜杠 (\) 分割字符串