我有一个var selected: [Int]? // FILL THIS ARRAY WITH `identifier`
// Test1
selected = extractIdentifiers(mainArray: mainArray) // OUTPUT: [0, 3]
// Test2
mainArray[0].innerArray![0].isBoolTrue = false
selected = extractIdentifiers(mainArray: mainArray) // OUTPUT: [3]
// Test3
mainArray[1].innerArray![0].isBoolTrue = false
selected = extractIdentifiers(mainArray: mainArray) // OUTPUT: nil
,其中包含以下值:
List[Double]
我要找到连续负数的最大总和。
所以从原始列表到单独的连续负面和正面列表
{-1.2200000000000006, -1.3200000000000003, -1.0099999999999998, 22.22, 11.11,
-31.310000000000002, -0.9799999999999986,-4, -5, 3, 2, 2.959999999999999}`
然后删除正数连续数
{
{-1.2200000000000006, -1.3200000000000003, -1.0099999999999998},
{22.22, 11.11},
{-31.310000000000002, -0.9799999999999986,-4, -5},
{3, 2, 2.959999999999999}
}
然后总结
{
{-1.2200000000000006, -1.3200000000000003, -1.0099999999999998},
{-31.310000000000002, -0.9799999999999986,-4, -5}
}
然后改为绝对值
{-3.5500000000000007, -41.29}
然后找到max = 41.29
答案 0 :(得分:2)
您可以使用foldLeft
:
val (max, _) = list.foldLeft((0,0)) {
case((max, current), n) if(n >= 0) => (max, 0)
case((m, current), n) =>
val sum = current - n
(sum max m, sum)
}
答案 1 :(得分:1)
您可以使用sliding
。
对于连续的负数对的总和:
val doubles = List(-1.2200000000000006, -1.3200000000000003, ...)
val result = doubles.sliding(2)
.collect { case List(a, b) if a < 0 && b < 0 => List(a, b) }
.map(_.sum)
.min
.abs
答案 2 :(得分:1)
如果确实意味着求和所有连续的负数,然后找到最大总和,就可以了。
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
<强>更新强>
好的,一个小小的改变会让你得到你想要的东西。
{{1}}
注意:您实际获得的是最低金额。如果你想把它表示为正数,你可以在事后得到绝对值。