题目描述:给定一个二进制数组,计算其中最大连续1的个数。
法1:
遍历数组,用列表m存储当前连续为1的数组。
当元素不为0时,把1加入m;为0时,计算当前m的长度并将其加入列表q,同时置m为空。
最后返回q中最大的一个。
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
m =[]
q = []
for i in range(len(nums)):
if nums[i]== 1:
m.append(nums[i])
else:
q.append(len(m))
m =[]
q.append(len(m))
return max(q)
法2:
用变量maxNum保存当前最大连续1的个数,变量count记录每次连续1的个数。
然后遍历数组,当元素不为0时,count加1;
当元素为0时,比较此时maxNum与count的大小,使maxNum是两者中的最大的,同时将count置为0。
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
if len(nums)<1:
return 0
count = 0 #当前连续1的个数
maxNum = 0 #当前最大连续1的个数
for i in nums:
if i:
count += 1
else:
if count > maxNum:
maxNum = count
count = 0
return maxNum if maxNum>count else count
简化判断
ans = 0
c = 0
for i in nums:
c = c*i+i #遇0置0,遇1加1
if c > ans:
#记录连续1的长度
ans = c
return ans
法3:
将数组转成字符串,然后根据0分隔,返回字符串的最大长度
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
return max(len (substr) for substr in ''.join([str(x) for x in nums]).split("0"))