数据结构,以找到任意数下面的下一个最大值

时间:2013-10-03 11:19:10

标签: java algorithm data-structures time-complexity

我正在尝试查找要在我的Java项目中使用的数据结构。我想要做的是从一组数字中获得低于任意数字的下一个最大值,或者如果不存在这样的数字则通知。

示例1) 我的任意号码是7.0。 {3.1,6.0,7.13131313,8.0} 我需要从这个集合中得到的数字是6.0。

例2) 我的任意数字是1.0。 {2.0,3.5555,999.0} 该集合中不存在下一个最高数字,因此我需要知道它不存在。

我能想到的最好的是通过数组进行索引和比较,并在我查看任意数字后返回1步。在最坏的情况下,虽然我的时间复杂度是O(n)。还有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

如果您可以预处理值列表,那么您可以对列表进行排序(O(NLogN)时间)并执行二进制搜索,对于您想要获得答案的每个值,将需要O(LogN)对于。否则你不能比O(N)做得更好。

答案 1 :(得分:1)

您需要先对数字进行排序。 然后你可以做一个简单的二进制搜索,其比较函数根据你的需要进行修改。在每个点检查元素是否大于输入,如果是,则在左侧或右侧搜索。最后修改后的二进制搜索应该能够提供更大,更小的数字,以便您轻松解决问题。复杂性是lg n。

答案 2 :(得分:1)

我建议您查看TreeSet.floor(...)TreeSet.lower(...)。其中一个应该满足您的要求,并且两者都有O(logN)复杂性...假设您已经构建了TreeSet实例。

如果你只有一个排序数组并且不想要构建TreeSet的开销,那么自定义二进制搜索可能是最好的选择。

答案 3 :(得分:0)

您的两个示例集看起来都是排序的......

如果是这种情况那么你需要二元搜索...... 如果情况并非如此,那么你需要一次访问每个元素。所以需要时间n ..