您好,登錄后才能下訂單哦!
這篇文章主要介紹了leetcode如何實現滑動窗口,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
滑動窗口類題目基本上技巧在于維護一個滑動窗口,移動窗口的左右指針,使得窗口滿足一定條件,關鍵在于如何處理窗口滿足條件的地方,使得算法更高效。
給定一個由若干 0
和 1
組成的數組 A
,我們最多可以將 K
個值從 0 變成 1 。
返回僅包含 1 的最長(連續(xù))子數組的長度。
示例 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
2,我們定義指針l,r分別表示窗口左右下標,移動r,當A[r]==0的時候我們增加0的個數記錄sum,分兩種情況
A,sum>K 這個時候需要移動左指針,讓0的個數減1
B,sum<=K 無需處理,繼續(xù)移動右指針
func longestOnes(A []int, K int) int { if K==0 &&len(A)<1{ return 0 } l:=0 sum:=0 max:=0 for r:=0;r<len(A);r++{ if A[r]==0{ sum++ if sum>K{ for A[l]!=0{ l++ } l++ sum-- } } if r-l+1>max{ max=r-l+1 } } return max}
感謝你能夠認真閱讀完這篇文章,希望小編分享的“l(fā)eetcode如何實現滑動窗口”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。