滑動視窗法(Sliding Window)是一種常用於處理子數列或子字串問題的技巧,主要用於解決連續數據結構的問題。其核心思想是使用一個固定或可變長度的視窗,不斷在數據結構上滑動來檢查視窗內部的元素,進而優化時間複雜度。
滑動視窗法本質上是一種雙指針技巧,通過兩個指針標記視窗的範圍,並動態地擴展或縮小視窗以避免重複計算已處理過的數據。這種方法適合處理與連續數據相關的多種問題,例如計算最大或最小子數列和、查找最長不重複子串,以及處理固定或變動長度的子數列或子字串問題。此外,滑動視窗法還應用於連續數據的分析,如溫度變化、股票價格的滑動平均數等。
範例說明
問題:在給定的 [2, 5, 8 ,6 ,1] 數組中,找到長度為 3 的子數列中的最大和。
解法:首先,初始化一個長度為 3 的視窗,計算數組中前 3 個元素的和,並將其設置為最大和。接著,每次將視窗向右移動一個元素,計算新的子數列和。如果新的子數列和大於目前的最大和,則更新最大和。
優點:
缺點:
參考資料