Java 计算给定数组中的一个数字前面有其前导数的次数的程序

Java 计算给定数组中的一个数字前面有其前导数的次数的程序,java,arrays,algorithm,Java,Arrays,Algorithm,我早些时候问过这个问题,因为需要进一步澄清,所以关闭了该问题: 性能:检查问题的解决方案的正确性和性能,50%的性能意味着算法不是很好,可以用更好的方式完成 如果有什么不清楚的地方,请告诉我该怎么解决 如果给我一个长度为T、长度为N的数组,它包含从1到N的所有数字(该数组不应该有重复项) 如果在阵列中的任何给定(i)位置。位置(k)处的数字前面是i

我早些时候问过这个问题,因为需要进一步澄清,所以关闭了该问题:

性能:检查问题的解决方案的正确性和性能,50%的性能意味着算法不是很好,可以用更好的方式完成

如果有什么不清楚的地方,请告诉我该怎么解决

如果给我一个长度为T、长度为N的数组,它包含从1到N的所有数字(该数组不应该有重复项)

如果在阵列中的任何给定(i)位置。位置(k)处的数字前面是i 如果数组等于T={2,3,4,1,5},那么它应该返回一个2作为T[3]=1,T[4]=5

显而易见的解决方案是O(n^2)带嵌套循环

使用n(n+1)/2之和的公式,更好的解决方案是O(n)

但即使是O(n),性能仍为50%

你有没有找到更好的解决办法

同样在上一篇帖子中,一些人投了反对票,因为他们说: 如果一个数字不能重复,那么“如果假设第4位有一个3,那么我们必须在前面遇到1,2,3”的例子就没有意义


要回答这个问题,这里有一个例子:[2,1,4,3]

保持整数范围,例如,在区间树中、在中或在位集中。在lasr情况下,每组(1位序列)还应包含其他字段-最小和最大元素

对于每个元素:

当满足值K时,尝试将其加入包含K-1的集合

若此类集合存在且具有最小元素1,则可以递增计数器。现在这个集合的最大元素是K。若并没有这样的集合,用单个元素组成一个新的集合

尝试将最后一个集合(单个元素或大型元素)与包含K+1的集合联接


编辑:再看看

有人能解释一下为什么它被否决了吗。我需要改变什么吗。有什么不清楚的地方?@highperformancemarkrealy我已经用O(n)解决了,你说我没有尝试是什么意思?我问是否有人能想到除O(n)之外的其他方法