力扣485 最大連續1的個數

2021-10-13 07:23:09 字數 1657 閱讀 4767

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

輸入: [1,1,0,1,1,1]

輸出: 3

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

注意:

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

刷到這道題的第一印象就是和之前的力扣053 最大子序和非常相似。可以用動態規劃(dp)的思想來解。

本題陣列是乙個線性結構,只需要用乙個一維陣列即可求解,關鍵是如何找出當前元素和上乙個元素之間的關係

分析開始:由於二進位制陣列nums只會出現0或1兩種數字,所以討論0和1兩種情況即可。

我們開闢乙個與nums相同長度的陣列results,results中每乙個元素代表當前索引為止,nums的最大連續1個數。

我們只需要遍歷nums,當元素為1時,results[i] = results[i-1] + 1;當元素為0時,results[i] = 0(因為連續1序列結束了,此時的連續1個數為0)

class

solution

:def

findmaxconsecutiveones

(self, nums: list[

int])-

>

int:

results =[0

for i in

range

(len

(nums))]

results[0]

=1if nums[0]

==1else

0for i in

range(1

,len

(nums)):

if nums[i]==1

: results[i]

= results[i-1]

+1return

max(results)

這是本人最初寫的版本,總感覺寫的比較醜陋,不美觀。

其實完全可以在原陣列nums上進行修改(原地修改),不使用額外空間,一次遍歷既包含元素判斷,也包含元素更新。

下面是修改後的版本:

class

solution

:def

findmaxconsecutiveones

(self, nums: list[

int])-

>

int:

for i in

range(1

,len

(nums)):

if nums[i]==1

: nums[i]

= nums[i-1]

+1return

max(nums)

這裡有兩個小細節:

1、nums中元素為0的位置,不需要做判斷,直接跳過即可,因為0一旦出現,修改後的元素也為0,相當於是不需要修改。

2、nums首元素修改的值與修改前的值 是一定相等的,所以只需要從第二個元素(nums[1])開始遍歷即可。

這樣優化以後,感覺上邏輯差不多,但是提交後的執行用時卻短了不少。

485 最大連續1的個數

題目給定乙個二進位制陣列,計算其中最大連續1的個數。只包含0和1 常規思路一般想到的是都是遍歷陣列,用乙個變數記錄當前連續1的個數,另乙個變數記錄最大的長度,每當出現0就比較這兩個變數直到最後完成。但是這個題目我們可以用滑窗法來做 滑窗法滑動視窗法,可以用來解決一些查詢滿足一定條件的連續區間的性質等...

485 最大連續1的個數

給定乙個二進位制陣列,計算其中最大連續1的個數。示例 1 輸入 1 1,0 1,1 1 輸出 3解釋 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3 注意 輸入的陣列只包含 0 和1。輸入陣列的長度是正整數,且不超過 10,000。class solution def findmaxc...

485 最大連續1的個數

給定乙個二進位制陣列,計算其中最大連續1的個數。注意 輸入的陣列只包含 0 和1。輸入陣列的長度是正整數,且不超過 10,000。判斷陣列是否滿足注意條件,初始化變數x y,迴圈陣列,若為1則x 1,若為0則判斷y是否小於x,若小於則y x並且清空x,直到整個陣列迴圈完畢 class solutio...