Day38 作業題:最大連續1的個數
給定一個二進制數組, 計算其中最大連續1的個數。
示例 1:
輸入: [1,1,0,1,1,1]
輸出: 3
解釋: 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.
注意:
輸入的數組只包含 0 和1。
輸入數組的長度是正整數,且不超過 10,000。
請補全下面代碼:
class Solution(object):
def findMaxConsecutiveOnes(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
分析
假定:
假定第0~i 個元素,連續1的最大長度爲 maxi
迭代到第i個元素時,連續1的長度爲 count
f(i+1)
表示迭代完第i+1個元素時連續1的最大長度,則分兩種情況:
若第 i+1 個元素爲
0
,則 f(i+1) = max(maxi, count),連續1的最大長度 count 置 0若第 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 刷題總結的思維導圖