前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >求连续 1 的最大个数,详细分析

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

作者头像
double
发布2020-07-06 14:24:16
4660
发布2020-07-06 14:24:16
举报
文章被收录于专栏:算法channel算法channel

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

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

示例 1:

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

输出: 3

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

注意:

  1. 输入的数组只包含 0 和1。
  2. 输入数组的长度是正整数,且不超过 10,000。

请补全下面代码:

代码语言:javascript
复制
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

代码

根据以上分析,写出如下代码:

代码语言:javascript
复制
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的功能,非常巧妙:

代码语言:javascript
复制
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

Day1-Day35 刷题总结的思维导图

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Day38 作业题:最大连续1的个数
  • 分析
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档