Scala TreeSet takeRight
我有一大组整数,我用树集来存储它们。我的任务是找出比输入数字小的两个数字 例如,Set(1,5,8,9)和input=6应返回(1,5) 输入=8应返回(5,8) 到目前为止,我所掌握的代码如下:Scala TreeSet takeRight,scala,data-structures,treeset,Scala,Data Structures,Treeset,我有一大组整数,我用树集来存储它们。我的任务是找出比输入数字小的两个数字 例如,Set(1,5,8,9)和input=6应返回(1,5) 输入=8应返回(5,8) 到目前为止,我所掌握的代码如下: treeSet.to(inputNumber).takeRight(2) 我的理解是,.to()返回的元素投影小于logN time中的输入。我想知道额外的takeRight有多复杂。我从医生那里搞不懂 因为我的输入列表中有数百万个数字,所以我正在尽可能提高效率 有时在查看文档之前查看源代码更容易
treeSet.to(inputNumber).takeRight(2)
我的理解是,.to()返回的元素投影小于logN time中的输入。我想知道额外的takeRight有多复杂。我从医生那里搞不懂
因为我的输入列表中有数百万个数字,所以我正在尽可能提高效率 有时在查看文档之前查看源代码更容易 在树集合中:
override def takeRight(n: Int) = drop(size - math.max(n, 0))
override def drop(n: Int) = {
if (n <= 0) this
else if (n >= size) empty
else newSet(RB.drop(tree, n))
}
RBtree中的删除是O(logn)
,因此Scala的TreeSet
中由RBtree支持的takeRight
,也是O(logn)
def drop[A: Ordering, B](tree: Tree[A, B], n: Int): Tree[A, B] = blacken(doDrop(tree, n))