【发布时间】:2015-05-15 19:48:39
【问题描述】:
假设给定一个一维数组:
[2, 3, 1, 5, 0, 2]
目标是构造另一个长度相同的数组,其中每个元素表示数组中大于当前数字的后续元素中的元素数量(不不同)。所以在我的情况下输出将是:
[2, 1, 2, 0, 1, 0]
O(n^2) 算法非常简单。什么是更有效的算法(最好在 Java 中)?
【问题讨论】:
-
我想你可以向后遍历数组,然后创建一个新的排序列表。您使用的数字只是排序列表中该元素之后的元素数。您可能可以将其转换为 O(n*lg(n)) 算法
-
@SamIam OP 说他需要计算 后续 元素,而不是全部。排序会破坏顺序,因此不会保存子序列,所以我认为排序不是正确的解决方案
-
@FalconUA 看看他的例子中的第三个元素。他将
1映射到2,尽管最大的数字就在1之后 -
他没有映射任何东西,他的数组中的第三个元素只是后续大于1的元素数,所以我们只有2个元素:5和2.
-
@FalconUA 那么如何制作一个新的排序列表来阻止他这样做呢?
标签: java arrays algorithm count