iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
佛心分享-刷題不只是刷題

Java刷題A:Leetcode Top 100 Liked系列 第 23

Day23 Sliding Window滑動視窗法 - 概念介紹

  • 分享至 

  • xImage
  •  

滑動視窗法Sliding Window)是一種常用於處理子數列或子字串問題的技巧,主要用於解決連續數據結構的問題。其核心思想是使用一個固定或可變長度的視窗,不斷在數據結構上滑動來檢查視窗內部的元素,進而優化時間複雜度。
滑動視窗法本質上是一種雙指針技巧,通過兩個指針標記視窗的範圍,並動態地擴展或縮小視窗以避免重複計算已處理過的數據。這種方法適合處理與連續數據相關的多種問題,例如計算最大或最小子數列和、查找最長不重複子串,以及處理固定或變動長度的子數列或子字串問題。此外,滑動視窗法還應用於連續數據的分析,如溫度變化、股票價格的滑動平均數等。

範例說明

問題:在給定的 [2, 5, 8 ,6 ,1] 數組中,找到長度為 3 的子數列中的最大和。

解法:首先,初始化一個長度為 3 的視窗,計算數組中前 3 個元素的和,並將其設置為最大和。接著,每次將視窗向右移動一個元素,計算新的子數列和。如果新的子數列和大於目前的最大和,則更新最大和。
https://ithelp.ithome.com.tw/upload/images/20241007/20168780wpGFgE1fHI.png


優點:

  • 時間複雜度低:滑動視窗法能夠通過避免重複計算已處理過的數據,有效地將時間複雜度優化到O(n)。
  • 簡單易實現:滑動視窗法的邏輯清晰直觀,使用雙指針即可實現,代碼結構簡單。

缺點:

  • 僅適用於連續子序列:滑動視窗法主要處理連續的子序列或子字串問題,不適用於無序或不連續的數據。
  • 變動視窗需要額外邏輯:當視窗的大小不是固定時,處理邏輯會變得稍微複雜,需要更多的條件控制和數據檢查。

參考資料

  1. 滑動視窗(Sliding Window) - HackMD
  2. [演算法] 學習筆記 — 4.4 解題技巧: 滑動窗口 Sliding Window - Medium
  3. 【筆記】資料結構與演算法 (JavaScript) (2) - Sliding Window & Recursion

上一篇
Day22 Linked Lists鏈結串列-題目3:141. Linked List Cycle
下一篇
Day24:Sliding Window滑動視窗-題目:3. Longest Substring Without Repeating Characters
系列文
Java刷題A:Leetcode Top 100 Liked26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言