gpt4 book ai didi

arrays - swift:平均连续正数

转载 作者:可可西里 更新时间:2023-11-01 00:00:01 25 4
gpt4 key购买 nike

我们有一个数组,例如:

let numbers = [-1.0,1.0,3.0,4.0,-1.0,-2.0,2.0]

我们知道如何获得最大连续正数:

let pos = numbers.map({ () -> (Double) -> Int in var c = 0; return { c = $0 > 0 ? c + 1 : 0; return c } }()) 
// [0, 1, 2, 3, 0, 0, 1]
let maxConsecutivePos = pos.max()!
//3

在我们的例子中,我们如何使用闭包和 pos 数组以相同的方式找到平均连续正数?对于此示例,我们将总和 (3 + 1) 除以 2 -> 2 是预期输出。

最佳答案

一个可能的解决方案:将数组拆分为连续的切片正数,然后计算平均切片长度:

let numbers = [-1.0, 1.0, 3.0, 4.0, -1.0, -2.0, 2.0]

let slices = numbers.split(whereSeparator: { $0 <= 0 })
// --> [ArraySlice([1.0, 3.0, 4.0]), ArraySlice([2.0])]

let avg = Double(slices.reduce(0, { $0 + $1.count })) / Double(slices.count)
print(avg) // 2.0

关于arrays - swift:平均连续正数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47160560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com