Leetcode #485 最大連續1的個數
阿新 • • 發佈:2021-02-16
目錄
題目描述
給定一個二進位制陣列, 計算其中最大連續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 最長湍流子陣列
- 法②:本題和做過的那題不同,本題只有 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)。
心得
- 對於一道題更多的要注重其應用場景、使用情況,而非對題的解決。
- 做題要靈活變通,多讀、多跑評論區優秀程式碼。