首页 > 解决方案 > 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
    }
}

标签: swiftalgorithmdata-structures

解决方案


两个小调整,检查数组大小并不是真正需要的,只需要在找到 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
}

推荐阅读