Scala: trouver la somme maximale de nombres négatifs consécutifs dans une liste de doubles
IncompleteCoder
J'ai un List[Double]
avec les valeurs suivantes:
{-1.2200000000000006, -1.3200000000000003, -1.0099999999999998, 22.22, 11.11,
-31.310000000000002, -0.9799999999999986,-4, -5, 3, 2, 2.959999999999999}`
Je devais trouver la somme maximale des nombres négatifs consécutifs.
Donc, de la liste originale à des listes consécutives séparées de négatifs et positifs
{
{-1.2200000000000006, -1.3200000000000003, -1.0099999999999998},
{22.22, 11.11},
{-31.310000000000002, -0.9799999999999986,-4, -5},
{3, 2, 2.959999999999999}
}
puis supprimez les nombres consécutifs positifs
{
{-1.2200000000000006, -1.3200000000000003, -1.0099999999999998},
{-31.310000000000002, -0.9799999999999986,-4, -5}
}
puis somme
{-3.5500000000000007, -41.29}
puis changez en valeurs absolues
{3.5500000000000007, 41.29}
puis trouvez max = 41,29
jwvh
Si vous vraiment dire pour résumer tous les numéros de négatifs consécutifs, puis trouver le maximum de somme, ce fera.
val nums = List(-1.2200000000000006, -1.3200000000000003, -1.0099999999999998,
22.22, 11.11, -31.310000000000002, -0.9799999999999986, 2.959999999999999)
nums.foldLeft(List[Double]()){
case (l,n) if n < 0 => if (l.isEmpty) List(n) else n + l.head :: l.tail
case (l, _) => Double.MinValue :: l
}.max
// res0: Double = -3.5500000000000007
mise à jour
OK, un changement mineur vous permettra d'obtenir ce que vous recherchez.
nums.foldLeft(List(0.0)){
case (l,n) if n < 0 => n + l.head :: l.tail
case (l, _) => 0.0 :: l
}.min.abs // res0: Double = 32.29
Remarque: ce que vous recherchez réellement, c'est la somme minimale. Si vous voulez qu'il soit exprimé sous forme de nombre positif, vous pouvez obtenir la valeur absolue après coup.