Table of Contents
485. 最大连续1的个数
这是我在leetcode上的第一个题目,嗯,我没做“两数之和”,而是直接来到了这里,
题目:给定一个二进制数组, 计算其中最大连续1的个数。
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意
输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。
思路:首先不放在函数下先跑一遍测试,设置一个计数变量 t t t,利用依次循环,记录每一次读到连续1的个数,增加一个判断,如果发现非1的元素,我们需要结束当前计数,这时候需要另外一个临时变量 T T T,把这些前一段1的个数t保存下来,但这里不能直接更新 T T T,而是应该取, T T T与 t t t取一个最大的,因为题目要最大的连续‘1’的个数.
这样的时间复杂度应该是 O ( N ) O(N) O(N)
a = [1,1,0,1,1,1]
t = 0
T = 0
for i in a:
if i == 1:
t += 1
elif i != 1:
T = max(T,t)
t = 0
print(max(T,t))
3
我的解法:
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
t = 0
T = 0
for i in nums:
if i == 1:
t += 1
elif i != 1:
T = max(T,t)
t = 0
return max(T,t)
官方题解
方法一:一次遍历
题目的约束让这个问题变得简单,使得我们可以在一次遍历解决它。[这个方法其实就是我的想法]
算法:
- 用一个计数器 count 记录 1 的数量,另一个计数器 maxCount 记录当前最大的 1 的数量。
- 当我们遇到 1 时,count 加一。
- 当我们遇到 0 时:
- 将 count 与 maxCount 比较,maxCoiunt 记录较大值。
- 将 count 设为 0。
- 返回 maxCount。
作者:LeetCode
链接:https://leetcode-cn.com/problems/max-consecutive-ones/solution/zui-da-lian-xu-1de-ge-shu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
count = max_count = 0
for num in nums:
if num == 1:
# Increment the count of 1's by one.
count += 1
else:
# Find the maximum till now.
max_count = max(max_count, count)
# Reset count of 1.
count = 0
return max(max_count, count)
复杂度分析
- 时间复杂度: O ( N ) O(N) O(N)。 N N N值得是数组的长度。
- 空间复杂度: O ( 1 ) O(1) O(1),仅仅使用了 count 和 maxCount。
方法二:
- 在 Python 中可以使用 map 和 join 来解决此问题。
- 使用 splits 函数在 0 处分割将数组转换成字符串。
- 在获取子串的最大长度就是最大连续 1 的长度。
作者:LeetCode
链接:https://leetcode-cn.com/problems/max-consecutive-ones/solution/zui-da-lian-xu-1de-ge-shu-by-leetcode/
来源:力扣(LeetCode)
def findMaxConsecutiveOnes(self, nums):
return max(map(len, ''.join(map(str, nums)).split('0')))