求连续 1 的最大个数,详细分析

Day38 作业题:最大连续1的个数

给定一个二进制数组, 计算其中最大连续1的个数。

示例 1:

输入: [1,1,0,1,1,1]

输出: 3

解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.

注意:

  1. 输入的数组只包含 0 和1。

  2. 输入数组的长度是正整数,且不超过 10,000。

请补全下面代码:

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """

分析

假定:

  1. 假定第0~i 个元素,连续1的最大长度为 maxi

  2. 迭代到第i个元素时,连续1的长度为 count

f(i+1)表示迭代完第i+1个元素时连续1的最大长度,则分两种情况:

  1. 若第 i+1 个元素为 0,则 f(i+1) = max(maxi, count),连续1的最大长度 count 置 0

  2. 若第 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 刷题总结的思维导图

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章