题目:
给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。
代码1:
class Solution:
def findMaxConsecutiveOnes(self, nums: list) -> int:
nums.append(0)
position = 0
newlen = []
for i in range(nums.count(0)):
position = nums.index(0, position) + 1
newlen.append(position - 1)
maxLength = newlen[0]
for j in range(len(newlen) - 1):
if newlen[j+1] - newlen[j] > maxLength:
maxLength = newlen[j+1] - newlen[j] -1
return maxLength
说明1:
首先在原列表最后添加0,用于截取最后一段连续1的长度,第一个循环找出列表中列表中所有0的下标组成新的列表,第二个for循环计算新列表的前后两个数的差值,并取所有差值中最大的,即为最大连续1的个数。
代码2:
class Solution:
def findMaxConsecutiveOnes(self, nums: list) -> int:
nums.append(0)
currentLength = 0
maxLength = 0
for i in nums:
if i == 1:
currentLength += 1
else:
if currentLength > maxLength:
maxLength = currentLength
currentLength = 0
return maxLength
说明2:
与1取索引计算不同,代码2中直接使用nums中的值进行计算。同样在原列表最后追加一个0,保证列表中最少有一个0代码可以走到else分支。依次循环nums中的元素,如果是1,则当前长度+1。如果是0,则判断当前长度与最大长度的大小关系。注意currentLength重置为0,一定要在第二个if外进行,也就是说不管长度与最大长度的大小关系如何,在遇到元素0时,当前长度要置0,然后重新参加计算。