Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了快速最大连续正数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用闭包计算最大连续正数?

var numbers = [1,3,4,-1,-2,5,2,-3,-4,5]
//in this case it should be 3

print(numbers.reduce(0,{ $1 > 0 ? $0 + 1 : $0 } ))//this counts @R_875_10586@l positive numbers

解决方法

更新:更简单的解决方案:将数组拆分为多个切片
正元素,并确定最大切片长度:

let  numbers = [1,5]
let maxConsecutive = numbers.split(whereSeparator: { $0 <= 0 }).map { $0.count }.max()!
print(maxConsecutivE) // 3

老答案:)使用Swift running sum的想法:

let  numbers = [1,5]

let maxConsecutive = numbers.map({
    () -> (int) -> Int in var c = 0; return { c = $0 > 0 ? c + 1 : 0; return c }
}()).max()!

这里map()将每个数组元素映射到连续正数的计数
在这种情况下,数字到元素位置

[1,1,1]

转换创建为“立即评估
闭包“捕获一个保存当前数字的变量c
连续的正数.转换增加或重置c,
并返回更新的值.

如果数组可能很大,则将其更改为

let maxConsecutive = numbers.lazy.map( ... ).max()!

这样就可以确定最大运行长度而无需创建中间数组.

大佬总结

以上是大佬教程为你收集整理的快速最大连续正数全部内容,希望文章能够帮你解决快速最大连续正数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。