为什么不用每次重算
不重算整个窗口而是「一进一出」,省下的是【0】。
固定窗口的第一步(C++)
写固定窗口,第一步应该【0】。
长度 3 的窗口最大和
数组是 17 8 15 13 23 24 19,窗口长度 3。运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #incl
先把初始窗口建起来
补全代码:把前 3 个加起来当初始窗口,输出这个和。 (本题用 g++ -std=c++17 -O0 编译。)
让窗口滑起来
补全 max_window:建好初始窗口之后,每滑一格加上新进来的、减去出去的,一路记住最大的和。 (本题用 g++ -std=c++17 -O0 编译。)
把每个窗口的和都列出来
补全代码:算出每一个长度为 3 的窗口的和,按顺序用 / 连起来输出。 (本题用 g++ -std=c++17 -O0 编译。)
一进一出省了多少
数组长 n、窗口长 k:每次重算是 (n-k+1)×k 次加法,一进一出是 k + (n-k)×2 次。补全两个函数,算 n=1000、k=100 的情况,用 / 连起来输出(重算在前)。 (本题用 g++ -std=c++17 -O0 编
可变窗口和固定窗口的区别
第 1 步:扩到和 53,够了 第 2 步:收左端,和降到 36 第 3 步:扩到和 59,够了 第 4 步:收左端,和降到 36 第 5 步:扩到和 60,够了 第 6 步:收左端,和降到 47 第 7 步:扩到和 66,够了 第 8 步
什么时候该收缩左端
求「和不小于目标的最短窗口」时,收缩左端的时机是【0】。
两端只往右为何还是 O(n)
可变窗口的两个指针都只往右,总代价是 O(n),因为【0】。