vocus logo

方格子 vocus

算法專區 解構線性掃描序列的必勝法 (固定長度與可變長度)

更新 發佈閱讀 3 分鐘

概念

「移動視窗」是一種線性掃描序列的方法, 常用在子陣列 / 子字串 / 子序列 問題上

常見兩種滑動視窗

  1. 固定長度窗口 : 已知子陣列長度, 例如找長度為 k 的子陣列最大和

流程 :

A. 用一個變數 window_sum 紀錄窗口內的總和

B. 先把前 k 個元素加入窗口

C. 窗口有右邊移動 : 移除左邊的元素, 加入新的右邊元素, 更新 window_sum 或其他資訊

int[] nums = {1, 2, 3, 4, 5};
int k = 3;
int maxSum = 0;
int windowSum = 0;

// 先計算前 k 個元素
for (int i = 0; i < k; i++) {
windowSum += nums[i];
}

maxSum = windowSum;

// 滑動窗口
for(int i = k; i < nums.length; i++) {
windowSum = windowSum - nums[i-k] + nums[i] // 左邊出去, 右邊進來
maxSum = Math.max(maxSum, windowSum);
}

System.out.println(maxSum) // 12
  1. 可變長度窗口 (雙指針) : 像「最小長度子陣列和 >= target」或 「不重複字符號的最長子字串」

技巧 : 用 left, right 兩個指針定義窗口範圍 [left, right], 根據條件決定, 擴大右邊縮小左邊

String s = "abcabcbb";

Set<Character> set = new HashSet<>();
int left = 0, right = 0, maxLen = 0;

while(right < s.length()) {
if (!set.contains(s.charAt(right)) {
set.add(s.cahrAt(right));
right++;
maxLen = Math.max(maxLen, set.size());
}else {
set.remove(s.charAt(left));
left++;
}
}

System.out.println(maxLen) // 3 ("abc")​

總結

  • 滑動視窗就是一個範圍在數列上移動, 避免每次都重新掃描整個子序列
  • 固定長度 -> 常用 sum / max / min 的累加或更新
  • 可變長度 -> 常用 「條件滿足就縮左邊, 不滿就擴右邊」















留言
avatar-img
Krist
2會員
11內容數
您好, 目前是軟體工程師 Krist
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
00631L 冷熱指標程式更新
Thumbnail
00631L 冷熱指標程式更新
Thumbnail
public class MultiplicationTable { public static void main(String[] args) { int size = 9; // 設定九九乘法表的大小 // 雙層迴圈用於生成九九乘法表 f
Thumbnail
public class MultiplicationTable { public static void main(String[] args) { int size = 9; // 設定九九乘法表的大小 // 雙層迴圈用於生成九九乘法表 f
Thumbnail
我今天學到了一個應用程式,只要把自己想打得字打進去打進去,在設定自己喜歡的圖片,他就換幫你轉換成一種密密麻麻很酷的風格。這堂課讓我學到很多東西,也明白現在的科技做的事越來越多了~希望自己以後能更努力的學習
Thumbnail
我今天學到了一個應用程式,只要把自己想打得字打進去打進去,在設定自己喜歡的圖片,他就換幫你轉換成一種密密麻麻很酷的風格。這堂課讓我學到很多東西,也明白現在的科技做的事越來越多了~希望自己以後能更努力的學習
Thumbnail
無論年紀多大多小,只要「願意」付出行動 時間、地點都不是問題 現在都有兒童程式課程 小朋友學的是利用積木組合而成的程式 大朋友就可以直接拿鍵盤來劈哩啪啦開始寫程式碼囉~
Thumbnail
無論年紀多大多小,只要「願意」付出行動 時間、地點都不是問題 現在都有兒童程式課程 小朋友學的是利用積木組合而成的程式 大朋友就可以直接拿鍵盤來劈哩啪啦開始寫程式碼囉~
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
白晝的餘燼用酒澆熄 自愛情燃燒後 一壺傾倒的月光    漫過你的唇    輕吻沉醉的靈魂 這是你的城市 不是我的  我的城市在夜裡燃燒 自你走後 漫天紛飛的細雨                                                                  
Thumbnail
白晝的餘燼用酒澆熄 自愛情燃燒後 一壺傾倒的月光    漫過你的唇    輕吻沉醉的靈魂 這是你的城市 不是我的  我的城市在夜裡燃燒 自你走後 漫天紛飛的細雨                                                                  
Thumbnail
原本這次的徵文題目應該是「整座城市都在閱讀─我讀2021台北國際書展」,最後很可惜這個題目也被迫夭折。 不過實體無法做到的,就以數位實現,這本來就是方格子一直在做的事。所以即使書展取消了,閱讀也不曾/不該/不會停止。邀請格友們來分享你最近的購書清單…
Thumbnail
原本這次的徵文題目應該是「整座城市都在閱讀─我讀2021台北國際書展」,最後很可惜這個題目也被迫夭折。 不過實體無法做到的,就以數位實現,這本來就是方格子一直在做的事。所以即使書展取消了,閱讀也不曾/不該/不會停止。邀請格友們來分享你最近的購書清單…
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News