1. 程式人生 > >【LeetCode 簡單題】113-最大連續1的個數

【LeetCode 簡單題】113-最大連續1的個數

宣告:

今天是第113道題。給定一個二進位制陣列, 計算其中最大連續1的個數。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一個二進位制陣列, 計算其中最大連續1的個數。

示例 1:

輸入: [1,1,0,1,1,1]
輸出: 3
解釋: 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.

注意:

  • 輸入的陣列只包含 0 和1
  • 輸入陣列的長度是正整數,且不超過 10,000。

 

 

解法1。遍歷nums,遇1就count加1,反之把count放到res中,然後置0,在迴圈結束後還需手動新增count到res中,因為全1的情況就不會走else分支,所以需要手動新增,程式碼如下。

執行用時: 52 ms, 在Max Consecutive Ones的Python提交中擊敗了98.67% 的使用者

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = []
        count = 0
        for i in nums:
            if i == 1:
                count += 1
            else:
                res.append(count)
                count = 0
        res.append(count)    # 避免全1的情況,在上述程式碼中未能append計算出的count
        return max(res)

        # 還有種方法可以省去在迴圈結束後還append(count)
        在開始的地方新增一句nums.append(0),這樣可以保證在for迴圈中至少走一次else分支

解法2。其實上述程式碼用了多餘的空間,其實不必要儲存所有count的取值,簡化成只保留最大的count,程式碼如下。

執行用時: 52 ms, 在Max Consecutive Ones的Python提交中擊敗了98.67% 的使用者 

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_con = 0    # 儲存最大的count計數
        count = 0
        for i in nums:
            if i == 1:
                count += 1
            else:
                if count>max_con:
                    max_con = count
                count = 0
        if max_con < count:
            max_con = count
        return max_con

 解法3。發現一種很聰明的做法,利用了nums元素的0、1這2種取值,程式碼如下。

執行用時: 56 ms, 在Max Consecutive Ones的Python提交中擊敗了87.17% 的使用者

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        sum_1 = 0
        for i in nums:
            sum_1 = sum_1*i + i
            if sum_1 > res:
                res = sum_1
        return res

結尾

解法1:原創

解法2&解法3:LeetCode