我试图在我的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)。有没有更好的办法?
我建议您查看树集。地板(…)
或
树集。下(…)
。其中一个应该满足您的需求,并且两者都具有
O(logN)
复杂性。。。假设您已经构建了树集
实例。
如果您只有一个排序数组,并且不希望构建
树集的开销,那么定制二进制搜索可能是最好的选择。
你需要先对数字进行排序。然后你可以做一个简单的二进制搜索,根据你的需要修改它的比较函数。在每个点检查元素是否大于输入,如果是,则在左侧或右侧搜索。最后,你修改过的二进制搜索应该能够提供更大和更小的数字,你可以轻松解决问题。复杂性是lg n。
如果您可以预处理值列表,那么您可以对列表进行排序(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 现在的情况是,重要的是搜索、复杂性和事情按顺序进行所需的时间 例如,它将首先选择要搜索的第一行,它将首先与不匹配的匹配,然后必须与匹配,然后再与不匹配的匹配,最后与匹配,最后找到键 类似地,如果需要搜索第二个字符串,比如说,