2012-01-28 67 views

回答

14

這個怎麼樣:

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

'xs.tail.scanLeft(xs.head)((acc,x)=>(acc + x).max(x))max'如果所有可能都是負數。 :d – lcn 2013-12-12 19:39:35

6

我更喜歡摺疊解決掃描解決方案 - 雖然有肯定的優雅後者。無論如何,

numbers.foldLeft(0 -> 0) { 
    case ((maxUpToHere, maxSoFar), n) => 
    val maxEndingHere = 0 max maxUpToHere + n 
    maxEndingHere -> (maxEndingHere max maxSoFar) 
}._2