swift - swift中的最大连续数
问题描述
我正在尝试通过解决 LeetCode 上的简单面试问题来学习 Swift。
问题如下:
给定一个二进制数组,找出该数组中连续 1 的最大数目。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释:前两位或后三位是连续的 1。连续 1 的最大数量为 3。
笔记:
输入数组将只包含 0 和 1。输入数组的长度为正整数且不会超过 10,000
我已经解决了以下问题,没问题,它运行并覆盖了测试用例,但它表明我的提交只比所有提交快 73%。我想知道是否有更好的方法来解决这个问题。我的解决方案时间复杂度是 O(n)。
class Solution {
func findMaxConsecutiveOnes(_ nums: [Int]) -> Int {
var globalMax = 0
var localMax = 0
for num in nums
{
if num == 1
{
localMax += 1
globalMax = max(globalMax, localMax)
}
else
{
localMax = 0
}
}
return globalMax
}
}
解决方案
两个小调整,检查数组大小并不是真正需要的,只需要在找到 0 时调用 max 并在最后完成
func findMaxConsecutiveOnes(_ nums: [Int]) -> Int {
var globalMax = 0
var localMax = 0
for num in nums {
if num == 1 {
localMax += 1
} else {
globalMax = max(globalMax, localMax)
localMax = 0
}
}
return max(globalMax, localMax)
}
我做了一个拆分和减少的实验,这个组合似乎比上面的组合稍微快一点,但与评论中链接的组合大致相同
func findMaxConsecutiveOnes3(_ nums: [Int]) -> Int {
return nums.split(separator: 0).reduce(ArraySlice<Int>(), { ($1.count > $0.count) ? $1 : $0 }).count
}
推荐阅读
- kotlin - 将多个图像上传到 Kotlin 中的 Firebase 存储时,while 循环似乎不适用于 .putFile
- opengl - 如何为 glGetShaderInfoLog 返回的 OpenGL 着色器编译错误设置文件名?
- javascript - 为什么没有立即显示 owl-carousel 中的分数分页?
- postgresql - 在 Postgres 中计算与最大值的比率
- python - 如何将显示层次关系的字典列表转换为树?
- python - How to use modulo and string correctly to translate a crypted sentence?
- twitter - 在图像中标记的用户(Twitter API)
- android - React Native 错误:构建 APK 时任务:app:bundleDebugJsAndAssets FAILED
- python - *Python* 使用函数参数在列表中重复列表的元素
- amazon-web-services - 使用 terraform 将 EC2 自己的 IP 添加为入站规则