- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
已阅读 this question及其答案,我得出的结论是这两种算法没有标准实现。不过,首先要介绍一些背景知识:
我们大多数人都熟悉 binarySearch 。这个想法是,给定一个排序数组(或Collection
,如果使用该类中的搜索工具),它会有效(以对数 - O(log2n) 时间)查找给定元素在数组/集合中的位置。我提供的特定链接包含以下文档:
[...] If the array contains multiple elements with the specified value, there is no guarantee which one will be found.
有时,我们并不关心是否找到(或未能找到)我们感兴趣的元素的第一次或最后一次出现。但是如果我们确实关心呢?
如果我们确实关心,我们可以使用二分搜索的变体,称为下限和上限。它们分别返回给定元素的第一个和最后一个1出现。
我来自C++
背景,我真的很喜欢我可以使用std::lower_bound
和std::upper_bound
(并且维护排序的容器的成员函数版本,例如容器上的 std::map
或 std::set
)。
最简单的用例是,给定一个已排序的集合,确定有多少个元素等于某个 x
。 This answer我最初链接的问题包含以下内容:
[After performing a binarySearch] Then you continue iterating linearly until you hit to the end of the equal range.
问题是这个操作是线性的,对于具有随机访问的集合,我们可以做得更好 - 我们可以使用下限和上限,然后减去返回的索引,我们得到对数结果,而不是线性,时间。
本质上,令我惊讶的是 Java 中不可能实现上限和下限算法。我知道我自己可以轻松实现它们,但是,例如,如果我的数据存储在 TreeMap
或 TreeSet
中怎么办?它们不是随机访问的,但考虑到它们的实现,上限和下限可以很容易地实现为它们的方法。
最后,我的问题是 - Java 中是否有上限和/或下限的实现,对于 TreeSet
和 TreeMap
最好是有效的?
1但这取决于惯例。在 C++
中,上限返回大于所查找元素的第一个元素。
最佳答案
这不是您想要的 TreeSet.floor()
和 TreeSet.ceiling()
吗?
或者,如果您希望排除相等性,则可以使用 higher()
和 lower()
。
关于java - Java 中的集合和/或数组是否有正确的 upperBound 和 lowerBound?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623268/
我正在尝试从如下所示的服务器响应中获取日期: "dateStart": "2019-08-21T14:54:03.285108Z", "dateEnd": "2019-09-20T06:15:03.2
下面是我试图运行的代码: class Student { def printDetails = println("I am a student") def printSomeOtherDeta
我正在尝试使用 spark-jdbc 读取 postgres 数据库上的表。为此,我想出了以下代码: object PartitionRetrieval { var conf = new Spa
在 Spark 中通过 JDBC 连接从 SQL Server 获取数据时,我发现我可以设置一些并行化参数,例如 partitionColumn , lowerBound , upperBound ,
我理解 PECS(生产者扩展,消费者 super )的概念,但对这些符号仍然感到困惑: public class PECSTest { public static void main(Stri
我想保护我的变量免于存储溢出值。 我正在计算树中每个级别和某些阶段的损失。 它给出类似 4.94567e+302 的值;这个值正确吗?如果我将它(如最小值、最大值等)与任何其他值进行比较。它会给出正确
已阅读 this question及其答案,我得出的结论是这两种算法没有标准实现。不过,首先要介绍一些背景知识: 我们大多数人都熟悉 binarySearch 。这个想法是,给定一个排序数组(或Col
let range = 3..<3 // lowerBound == upperBound Swift 标准库在多个地方使用这种类型的范围,例如在数组 insert(_, at:) 中方法。 Arra
我有一个类,我想用 for 循环在其中添加值。 这是我的课: public class Expandable { public var name: String public var
我尝试使用动画来关闭菜单,我决定在按下按钮时减小 UIScrollView 的大小,当大小减小到我想要的值时,然后将其隐藏。 为了在某些时候根据我想要的用户界面完成任务,我使用了“时间延迟功能”(给定
我是一名优秀的程序员,十分优秀!