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.

Articles connexes


Faire une liste de nombres consécutifs dans R

sfetan Je veux faire une liste de nombres consécutifs comme ceci: list(1,2,3,4) Donne une liste de quatre. Maintenant, je ne veux pas écrire tous les nombres, alors essayez: list(1:4) Donne la liste de longueur quatre. Si je veux faire une liste de quatre