python Solution LeetCode No.485 Max Consecutive Ones (最大连续1的个数)

本文介绍两种算法实现方式,用于计算给定二进制数组中最大连续1的个数。第一种算法通过查找列表中所有0的下标,计算相邻0之间的距离来获取最长连续1的长度;第二种算法则直接遍历数组,实时更新当前连续1的长度及最大长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个二进制数组, 计算其中最大连续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,然后重新参加计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值