3. HIPSTERVS. OLDSCHOOL
def hipsterMin(a: Array[Int]): Int = {
a.foldLeft(Int.MaxValue){ _.min(_)}
}
def oldschoolMin(a: Array[Int]): Int = {
var min = Int.MaxValue
var i = 0
while (i < a.length) {
min = if (a(i) < min) a(i) else min
i += 1
}
min
}
4. HIPSTERVS. OLDSCHOOL
def hipsterMin(a: Array[Int]): Int = {
a.foldLeft(Int.MaxValue){ _.min(_)}
}
def oldschoolMin(a: Array[Int]): Int = {
var min = Int.MaxValue
var i = 0
while (i < a.length) {
min = if (a(i) < min) a(i) else min
i += 1
}
min
}
Running time
967722
123424
16. SPECIALIZED QUEUE
trait CQueue[@specialized(Int, Long) T] {
/**
* @return Next element to be dequeued.
*/
def first(): T
/**
*
* @return Next element that is removed from the `CQueue`.
*/
def deque(): T
/**
* Adds element to the `CQueue`.
*/
def +=(elem: T)
def isEmpty: Boolean
}
17. IMPLEMENTATION
class CQueueAny[T, QueueType <: PriorityQueue[T]](protected val
underlying: QueueType)
extends CQueue[T] {
def +=(elem: T): Unit = underlying.enqueue(elem)
def deque(): T = underlying.dequeue()
override def first(): T = underlying.first()
override def isEmpty: Boolean = underlying.isEmpty
}
class CQueueInt[QueueType <: IntPriorityQueue](protected val
underlying: QueueType)
extends CQueue[Int] {
override def +=(elem: Int): Unit = underlying.enqueue(elem)
override def deque(): Int = underlying.dequeueInt()
override def first(): Int = underlying.firstInt()
override def isEmpty: Boolean = underlying.isEmpty
}
18. FACTORY
abstract class CQueueFactory[T] {
def fifo(): FIFO[T]
def priority(): CQueue[T]
def priority(order: Order[T]): CQueue[T]
}
private[collections] class CQueueFactoryAny[T] extends CQueueFactory[T] {
def fifo(): FIFO[T] = new CQueueAny[T, ObjectArrayFIFOQueue[T]](
new ObjectArrayFIFOQueue[T]()) with FIFO[T] {
override def enqueueFirst(elem: T): Unit =
underlying.enqueueFirst(elem)
}
}
private[collections] class CQueueFactoryInt extends CQueueFactory[Int] {
override def fifo() = new CQueueInt[IntArrayFIFOQueue](
new IntArrayFIFOQueue()) with FIFO[Int] {
def enqueueFirst(elem: Int): Unit = underlying.enqueueFirst(elem)
}
}