我试图通过使用队列找到移动窗口的最小 - 最大值。我能够创建一个解决方案,但这感觉非常慢。
这是我的解决方案:
def min_max(value:T, windowSize: Int):(T,T) = {
val queue = new scala.collection.mutable.Queue[A]() //I added the creation of this queue here for you to see
if(queue.size == windowSize) queue.dequeue
queue.enqueue(value)
var min = queue.head
var max = queue.head
for(i <- queue) {
if(i<min) min = i
if(i>max) max = i
}
(min, max) // returns the min and max in a tuple
}
答案 0 :(得分:0)
这取决于您的队列的构建和填充方式,以及它的大小。简而言之,您可以更快地扫描最小/最大值,但它会使队列中的元素添加速度变慢,或者产生一些前期成本。
你正在做的是线性的,这与使用线性数据结构一样好,但是你可以用更惯用的方式来编写它(而且我也不确定与{{1}的交易是什么在开头,以及当队列大小小于或大于参数时你期望发生的事情:
dequeue
这也假设没有竞争(没有人在你遍历时向队列中添加数据)。如果你采用不使用可变结构的功能方法,那么所有这些东西都会更容易推理,除非你绝对必须这样做。