2012-01-28 1 views

ответ

14

Что об этом:

numbers.scanLeft(0)((acc, n) => math.max(0, acc + n)).max 
+5

'xs.tail.scanLeft (xs.head) ((соотв, х) => (соотв + х) .max (х)). Max', если все они могут возможно быть отрицательным. : D – lcn

6

Я предпочитаю складной раствор к раствору сканирования - хотя, конечно, элегантности к последнему. Во всяком случае,

numbers.foldLeft(0 -> 0) { 
    case ((maxUpToHere, maxSoFar), n) => 
    val maxEndingHere = 0 max maxUpToHere + n 
    maxEndingHere -> (maxEndingHere max maxSoFar) 
}._2 
Смежные вопросы