我只想要一个函数,如果true
的所有元素互相依赖,则返回List[Integer]
,即
noGaps(List(3,4,5)) // true
noGaps(List(4,3,5)) // false
noGaps(List(3,4,6)) // false
我有一些有用的东西,但它有点冗长 - 什么是最优雅的解决方案?
答案 0 :(得分:12)
这个怎么样?
def noGaps(xs: Seq[Int]) =
xs.size < 2 || xs.sliding(2).forall { case Seq(x, y) => y == x + 1 }
答案 1 :(得分:0)
def noGaps(xs: Seq[Int]) = xs.isEmpty||xs.tail == xs.map(_+1).init
答案 2 :(得分:0)
您可以明确地将List
与Range
进行比较:
def noGaps(l: Seq[Int]): Boolean =
l.isEmpty || l.sameElements(l.head to l.last)
请注意,尽管优雅,但由于l.last
为O(n)
,因此效率略低于sliding solution。如果n
是列表的大小,并且i
是存在间隙的第一个元素(如果没有间隙,则是n
),则将在{{1 }}步骤,而这一步则以i
步骤执行。