求連續 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 刷題總結的思維導圖

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