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

更新 發佈閱讀 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
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
白晝的餘燼用酒澆熄 自愛情燃燒後 一壺傾倒的月光    漫過你的唇    輕吻沉醉的靈魂 這是你的城市 不是我的  我的城市在夜裡燃燒 自你走後 漫天紛飛的細雨                                                                  
Thumbnail
白晝的餘燼用酒澆熄 自愛情燃燒後 一壺傾倒的月光    漫過你的唇    輕吻沉醉的靈魂 這是你的城市 不是我的  我的城市在夜裡燃燒 自你走後 漫天紛飛的細雨                                                                  
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
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
00631L 冷熱指標程式更新
Thumbnail
00631L 冷熱指標程式更新
Thumbnail
我今天學到了一個應用程式,只要把自己想打得字打進去打進去,在設定自己喜歡的圖片,他就換幫你轉換成一種密密麻麻很酷的風格。這堂課讓我學到很多東西,也明白現在的科技做的事越來越多了~希望自己以後能更努力的學習
Thumbnail
我今天學到了一個應用程式,只要把自己想打得字打進去打進去,在設定自己喜歡的圖片,他就換幫你轉換成一種密密麻麻很酷的風格。這堂課讓我學到很多東西,也明白現在的科技做的事越來越多了~希望自己以後能更努力的學習
Thumbnail
原本這次的徵文題目應該是「整座城市都在閱讀─我讀2021台北國際書展」,最後很可惜這個題目也被迫夭折。 不過實體無法做到的,就以數位實現,這本來就是方格子一直在做的事。所以即使書展取消了,閱讀也不曾/不該/不會停止。邀請格友們來分享你最近的購書清單…
Thumbnail
原本這次的徵文題目應該是「整座城市都在閱讀─我讀2021台北國際書展」,最後很可惜這個題目也被迫夭折。 不過實體無法做到的,就以數位實現,這本來就是方格子一直在做的事。所以即使書展取消了,閱讀也不曾/不該/不會停止。邀請格友們來分享你最近的購書清單…
Thumbnail
無論年紀多大多小,只要「願意」付出行動 時間、地點都不是問題 現在都有兒童程式課程 小朋友學的是利用積木組合而成的程式 大朋友就可以直接拿鍵盤來劈哩啪啦開始寫程式碼囉~
Thumbnail
無論年紀多大多小,只要「願意」付出行動 時間、地點都不是問題 現在都有兒童程式課程 小朋友學的是利用積木組合而成的程式 大朋友就可以直接拿鍵盤來劈哩啪啦開始寫程式碼囉~
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News