Ruby 从SortedSet检索max元素
我找到了Ruby 从SortedSet检索max元素,ruby,Ruby,我找到了SortedSet#max,但它似乎是O(N)。现在,我想做这样的事情: s = SortedSet.new((1..100000).to_a.reverse) 其中reverse只是为了确保 min_element = nil; s.each { |x| min_element = x; break } 对于最大元素,我将构建另一个SortedSet,将所有值乘以-1,并执行相同的操作。有更传统的方法吗?Monkey patchSortedSet class SortedSet
SortedSet#max
,但它似乎是O(N)。现在,我想做这样的事情:
s = SortedSet.new((1..100000).to_a.reverse)
其中reverse
只是为了确保
min_element = nil; s.each { |x| min_element = x; break }
对于最大元素,我将构建另一个
SortedSet
,将所有值乘以-1
,并执行相同的操作。有更传统的方法吗?Monkey patchSortedSet
class SortedSet
def max
@keys[-1]
end
def min
@keys[0]
end
end
这是O(1)。看起来真不错!但是我正在想为什么会出现以下错误:
max:undefined method[]for nil:NilClass(NoMethodError)
如果集
为空,那么既没有最小值也没有最大值,这就是为什么会出现上述错误。我不知道为什么,但似乎只有在调用SortedSet之后,它才能工作,而不会显示任何错误。不管怎样,这帮了大忙,谢谢。我也在试着发现它。请给我一点时间。@DatNguyen我很确定它不应该是空的,至少在没有先调用的情况下它是不能工作的。这是指向的链接。