2012-01-28 30 views

Trả lời

14

gì về điều này:

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

'xs.tail.scanLeft (xs.head) ((acc, x) => (acc + x) .max (x)). Max' nếu tất cả có thể âm. : D – lcn

6

Tôi thích giải pháp gấp với các giải pháp quét - mặc dù có chắc chắn Elegance để sau này. Dù sao,

numbers.foldLeft(0 -> 0) { 
    case ((maxUpToHere, maxSoFar), n) => 
    val maxEndingHere = 0 max maxUpToHere + n 
    maxEndingHere -> (maxEndingHere max maxSoFar) 
}._2 
Các vấn đề liên quan