LeetCode 最大连续1的个数(Python)

题目描述:给定一个二进制数组,计算其中最大连续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"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值