Day38 作业题:最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。
请补全下面代码:
class Solution(object):
def findMaxConsecutiveOnes(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
分析
假定:
假定第0~i 个元素,连续1的最大长度为 maxi
迭代到第i个元素时,连续1的长度为 count
f(i+1)
表示迭代完第i+1个元素时连续1的最大长度,则分两种情况:
若第 i+1 个元素为
0
,则 f(i+1) = max(maxi, count),连续1的最大长度 count 置 0若第 i+1 个元素为
1
,则 f(i+1) = max(maxi, count+1),连续1的最大长度 count 加 1
代码
根据以上分析,写出如下代码:
class Solution(object):
def findMaxConsecutiveOnes(self, nums):
maxi,count=0,0
for num in nums:
if num==0:
maxi = max(maxi,count)
count = 0
else:
maxi = max(maxi,count+1)
count += 1
return maxi
星友孙颖颍穎颕頴,还写出一个解法,非常不错。
巧妙之处在于下面这个公式,公式中+1应该为 +i ,抱歉笔误了:
它实现了遇1加1,遇0置0的功能,非常巧妙:
class Solution(object):
def continueOne(self, nums):
sum1, res = 0, 0
for i in nums:
#遇1加1,遇0置0
sum1 = sum1*i + i
if sum1 > res:
#记录连续1的长度
res = sum1
return res
原创不易,欢迎三连支持。算法刷题、求职面试的朋友可关注下方公众号,回复 1 获得 655 道LeetCode真题和答案的pdf:
Day1-Day35 刷题总结的思维导图