补全:处理完入栈

补全 prev_greater:处理完当前下标要入栈,后面的数才读得到它。补全后数有几个元素有左边更大。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有

开始练习 →

单调队列的队首是什么

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

开始练习 →

入队前要弹掉谁

新元素 a[i] 入队前,要把队尾值【0】的下标都弹掉。 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。

开始练习 →

队首下标太小说明什么

当队首下标 <= i - k 时,说明它【0】。 本节模型:window_max / window_min 用 std::deque 存下标做单调队列,求每个长度为 k 的窗口的最值。

开始练习 →

三个窗口的最大值

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

开始练习 →

窗口最大值之和

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

开始练习 →

补全:队尾维护

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

开始练习 →

补全:队首过期

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

开始练习 →

补全:什么时候出结果

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

开始练习 →

数组模拟队列要记什么

第 1 步:head、tail 都从 0 开始 第 2 步:q[tail++] = 7:放到队尾 第 3 步:q[tail++] = 5:放到队尾 第 4 步:q[tail++] = 3:放到队尾 第 5 步:head++:丢队首,不挪数据

开始练习 →