补全:数组版入队

补全 window_max_arr:把当前下标 i 放到队尾。补全后输出每个窗口的最大值。 本节模型:window_max_arr 不用 std::deque,用数组 q 加 head、tail 两个下标模拟两端操作。 (本题用 g++ -

开始练习 →

补全:数组版求最小

补全 window_min_arr:求最小,要弹掉队尾不比 a[i] 小的。补全后输出每个窗口的最小值。 本节模型:window_max_arr 不用 std::deque,用数组 q 加 head、tail 两个下标模拟两端操作。 (本题

开始练习 →

补全:一百万个数的累加

补全:用数组版单调队列算 100 万个数(窗口长 100)的窗口最大值之和。和会远远超过 int 的上限,累加器要选对类型。 本节模型:window_max_arr 不用 std::deque,用数组 q 加 head、tail 两个下标模

开始练习 →

改成求最小弹掉谁

把 window_max 改成求最小,只需把队尾维护改成弹掉值【0】的下标。 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。

开始练习 →

单调队列里存下标还是值

第 1 步:上:数组;下:单调队列里的值 第 2 步:4 入队:队尾更大的先弹掉 第 3 步:2 入队:队尾更大的先弹掉 第 4 步:队首就是这个窗口的最小 第 5 步:队首就是这个窗口的最小 第 6 步:队首就是这个窗口的最小 第 7 步

开始练习 →

为什么要用双端队列

单调队列需要【0】,所以用双端队列。 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。

开始练习 →

三个窗口的最小值

运行下面这段程序: 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。 #include <algorithm> #include <de

开始练习 →

补全:最小的队尾维护

补全 window_min:求最小,要弹掉队尾不比 a[i] 小的。补全后输出每个窗口的最小值。 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。 (本题

开始练习 →

补全:最小的队首过期

补全 window_min:队首下标 <= i - k 就出队。补全后输出每个窗口的最小值。 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。 (本

开始练习 →

补全:最小的出结果时机

补全 window_min:凑满 k 个数就产生结果。补全后输出每个窗口的最小值。 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。 (本题用 g++ -

开始练习 →