当前位置: 首页 > 知识库问答 >
问题:

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

党建义
2023-03-14

我试图在我的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)。有没有更好的办法?

共有3个答案

公孙宏畅
2023-03-14

我建议您查看树集。地板(…) 树集。下(…) 。其中一个应该满足您的需求,并且两者都具有O(logN)复杂性。。。假设您已经构建树集实例。

如果您只有一个排序数组,并且不希望构建树集的开销,那么定制二进制搜索可能是最好的选择。

宫修贤
2023-03-14

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

王涵育
2023-03-14

如果您可以预处理值列表,那么您可以对列表进行排序(O(NLogN)time)并执行二进制搜索,对于您想要得到答案的每个值,O(LogN)。否则你就没有比O(N)更好的了。

 类似资料:
  • 本文向大家介绍程序以查找Python中任意数字及其下一个较小数字的最大差,包括了程序以查找Python中任意数字及其下一个较小数字的最大差的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个称为nums的数字列表,我们必须找到任何数字与下一个较小数字之间存在的最大差。我们的目标是在线性时间内解决这个问题。 因此,如果输入类似于nums = [14、2、6、35、12],则输出将为21,因为35

  • 本文向大家介绍从数据结构中的最大HBLT中删除任意元素,包括了从数据结构中的最大HBLT中删除任意元素的使用技巧和注意事项,需要的朋友参考一下 从“最大”或“最小” HBLT中删除任意节点不是标准操作。优先队列或HBLT。如果要从HBLT中删除一个节点,例如K,则必须遵循以下规则。 从树上分离以K为根的子树,并将其替换为节点K子树的融合体。 从K到根的路径更新s的值,并根据需要交换此路径上的子树以

  • 这是一个面试问题。设计一个类,它存储整数并提供两个操作: 我想我可以使用BST,以便取O(logN)和取O(logN)(对于我应该添加每个节点的左/右子节点的数量)。 现在我想知道这是否是最有效的解决方案,没有更好的解决方案。

  • 给定一个数N,我们如何求最大P*Q null 因此,暴力解决方案起作用。 再进一步,我们看到Q_max<=n/2,如果我们确实同意P =√n。 我们可以将我们的解决方案集细化为仅有那些值{P,n\2},其中n\2>=√N。 这可能看起来微不足道,但它只是消除了可能的解决方案集的1/3。 我们是否可以添加其他聪明的程序来进一步减少设置?

  • 有没有一种java数据结构可以存储任意数量的元素?为了简单起见,我们假设元素也是大整数。 从理论上讲,使用带有 BigInteger 索引的数组是可以的,因为设置和获取值将是唯一需要的操作。但是数组不能包含超过 Integer.MAX_VALUE。(甚至更少,具体取决于 VM 依赖者,请参阅此问题)。 要实现这样的数据结构,一个简单的(天真的)解决方案是从LinkedList创建一个数据结构,并具

  • 我必须根据我的需要选择一种数据结构,我在下面解释以下值的条件 现在,比如说,如果我得到ytr,那么我将能够检索R1B1,或者说,我得到rGGty的值,那么我将能够检索R1B2 现在的情况是,重要的是搜索、复杂性和事情按顺序进行所需的时间 例如,它将首先选择要搜索的第一行,它将首先与不匹配的匹配,然后必须与匹配,然后再与不匹配的匹配,最后与匹配,最后找到键 类似地,如果需要搜索第二个字符串,比如说,