Scala中的Kadane算法

S0r*_*rin 10 functional-programming scala kadanes-algorithm

有没有人在功能样式中完成Kadane算法的Scala实现?

Hei*_*ger 17

那这个呢:

numbers.scanLeft(0)((acc, n) => math.max(0, acc + n)).max
Run Code Online (Sandbox Code Playgroud)

  • `xs.tail.scanLeft(xs.head)((acc,x)=>(acc + x).max(x)).max`如果all都可能是负数.:d (6认同)

Dan*_*ral 6

我更喜欢扫描解决方案的折叠解决方案 - 尽管后者确实很优雅.无论如何,

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