溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

leetcode如何實現滑動窗口

發(fā)布時間:2021-12-16 09:40:13 來源:億速云 閱讀:119 作者:小新 欄目:大數據

這篇文章主要介紹了leetcode如何實現滑動窗口,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

滑動窗口類題目基本上技巧在于維護一個滑動窗口,移動窗口的左右指針,使得窗口滿足一定條件,關鍵在于如何處理窗口滿足條件的地方,使得算法更高效。

最大連續(xù)1的個數

給定一個由若干 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è)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI