題目描述:
給定乙個由若干 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 <= a.length <= 20000
0 <= k <= a.length
a[i] 為 0 或 1
題解:滑動視窗演算法
滑動視窗中用到了左右兩個指標,它們移動的思路是:以右指標作為驅動,拖著左指標向前走。右指標每次只移動一步,而左指標在內部 while 迴圈中每次可能移動多步。右指標是主動前移,探索未知的新區域;左指標是被迫移動,負責尋找滿足題意的區間。
**
/**
* @param a
* @param k
* @return
*/var
longestones
=function(a
,k) right ++
// 移動右端點
while
(count >k)
left ++
// 移動左端點
} sum = math.
max(sum, right - left)
}return sum
};
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
示例 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 ...