【发布时间】:2018-12-21 16:35:28
【问题描述】:
我正在尝试通过解决 LeetCode 上的简单面试问题来学习 Swift。
问题如下:
给定一个二进制数组,求这个数组中连续1的最大个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释:前两位或后三位是连续的1。 连续 1 的最大数量为 3。
注意:
输入数组将只包含 0 和 1。 输入数组长度为正整数,不超过10000
我已经解决了以下问题,没问题,它运行并覆盖了测试用例,但它显示我的提交只比所有提交快 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
}
}
【问题讨论】:
-
codereview.stackexchange.com 可能是这个问题的更好归宿
-
这里不是问题,但总的来说,使用
isEmpty比测试count == 0更好。它使意图更加明确,如果您的类型不符合RandomAccessCollection,它实际上更有效。但正如其他人指出的那样,这里根本不需要检查。更实质性的观察是你不应该每次都打电话给maxnum == 1... -
说实话,这是一个很好的解决方案,复杂性是最好的。可能会实现一些优化,但总体改进可能是特定于机器的,以毫秒甚至更低的顺序。
标签: swift algorithm data-structures