給定乙個由若干 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,...