1004 最大連續1的個數 III(滑動視窗)

2021-10-19 13:21:47 字數 1067 閱讀 8725

給定乙個由若干 0 和 1 組成的陣列 a,我們最多可以將 k 個值從 0 變成 1 。

返回僅包含 1 的最長(連續)子陣列的長度。

示例 1:

輸入:a = [1,1,1,0,0,0,1,1,1,1,0], k = 2

輸出:6

解釋:[1,1,1,0,0,1,1,1,1,1,1]

粗體數字從 0 翻轉到 1,最長的子陣列長度為 6。

示例 2:

輸入:a = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], k = 3

輸出:10

解釋:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]

粗體數字從 0 翻轉到 1,最長的子陣列長度為 10。

分析:最長連續,想到滑動視窗,遇到1向右擴張,遇到0就要跟翻轉次數k討論,若k>0說明可以直接翻轉這個0,若等於0說明沒有翻轉次數了,左指標必須移動到目前視窗中最左邊的值為0的位置右側(視窗收縮),然後翻轉次數加1,視窗才能繼續向右移動

ps:滑動視窗的right隨著while一次次向右移動,核心在於如何確定左側什麼情況下移動,該移動多少。

public

:int

longestones

(vector<

int>

& a,

int k)

else

left++

; reversetimes++;}

} reversetimes--;}

// 每次都比較一下

1004 最大連續1的個數 III

題目描述 給定乙個由若干 0 和 1 組成的陣列 a,我們最多可以將 k 個值從 0 變成 1 返回僅包含 1 的最長 連續 子陣列的長度。示例 1 輸入 a 1,1,1,0,0,0,1,1,1,1,0 k 2 輸出 6 解釋 1,1,1,0,0,1,1,1,1,1,1 粗體數字從 0 翻轉到 1,...

1004 最大連續1的個數 III

自己的做法很麻煩並且時間複雜度高,最壞o n 2 o n 2 o n2 原因是沒有想到去數學推導,一步一步去想很費勁,應該改掉這個毛病。想到了二分的做法,但是寫麻煩了,首先統計了所有0塊所在的初始位置和個數,記為陣列a,然後遍歷所有的地方去填充0,這個時候就不能方便的從a中得到填充到哪為止,從而陷入...

1004 最大連續1的個數III

題目描述 給定乙個由若干 0 和 1 組成的陣列 a,我們最多可以將 k 個值從 0 變成 1 返回僅包含 1 的最長 連續 子陣列的長度。示例 1 輸入 a 1,1,1,0,0,0,1,1,1,1,0 k 2 輸出 6 解釋 1,1,1,0,0,1,1,1,1,1,1 粗體數字從 0 翻轉到 1,...