1. 程式人生 > 其它 >Leetcode #485 最大連續1的個數

Leetcode #485 最大連續1的個數

技術標籤:Leetcode-筆記leetcode演算法

目錄

題目描述

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

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/max-consecutive-ones/

示例1:

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

注意:

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

解題思路

關鍵詞:

  • 最大、連續
  • 只有 0 和 1

思路:

  • 法①:做過之前的 Leetcode #978 最長湍流子陣列
    有印象,當時採用的dp方式。本題法①受此題啟發。
  • 法②:本題和做過的那題不同,本題只有 0 和 1 兩種數字,再想想。

我的程式碼

法①:

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        if 1 not in nums:
            return 0
        res = [1] * len(nums)
        for i in range(1, len(nums)):
            if nums[i] == nums[i - 1] == 1:
                res[
i] += res[i - 1] return max(res)

另開闢了res[],空間複雜度提高,結果意料之內。
在這裡插入圖片描述
法②:

class Solution:
    def findMaxConsecutiveOnes(self, nums):
        maxCount = count = 0
        for i, num in enumerate(nums):
            if num == 1:
                count += 1  # 計數器 +1
            else:
                maxCount =
max(maxCount, count) count = 0 # 重新計數 maxCount = max(maxCount, count) return maxCount

時間複雜度:O(n),其中 nn 是陣列的長度。需要遍歷陣列一次。
空間複雜度:O(1)。
在這裡插入圖片描述

心得

  • 對於一道題更多的要注重其應用場景、使用情況,而非對題的解決。
  • 做題要靈活變通,多讀、多跑評論區優秀程式碼。