滑动窗口最值问题
第 1 步:窗口长 3,一格一格往右滑 第 2 步:第 1 个窗口:最大的亮起 第 3 步:第 2 个窗口:最大的亮起 第 4 步:第 3 个窗口:最大的亮起 第 5 步:第 4 个窗口:最大的亮起 第 6 步:每个窗口都重扫一遍就慢了 1
暴力求窗口最值有多慢
每个窗口都重新扫一遍求最大,n = 10^6、k = 10^3 时大约要比较【0】次。
单调结构为什么快
单调栈、单调队列能做到线性时间,是因为【0】。
单调队列比单调栈多了什么
单调队列相比单调栈,多了【0】这一步。
两个窗口的最大值之和
运行下面这段程序: #include <algorithm> #include <deque> #include <iostream> #include <string> #include &
单调栈里存的是什么
第 1 步:上:数;下:右边第一个更大 第 2 步:2 进栈等着 第 3 步:1 进栈等着 第 4 步:3 来了:弹出比它小的 第 5 步:1 进栈等着 第 6 步:4 来了:弹出比它小的 第 7 步:还在栈里的:右边没有更大 2 1 3
什么时候弹栈
扫到 a[i] 时,只要栈顶下标对应的值【0】,就弹出它并记下答案 a[i]。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有记 -1。
扫完还在栈里的怎么办
扫描结束时仍留在栈里的元素,它们的「下一个更大」记为【0】。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有记 -1。
单调栈的时间复杂度
用单调栈求所有元素的下一个更大元素,时间复杂度是【0】。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有记 -1。
几个元素有更大的
运行下面这段程序: 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有记 -1。 #include <algorithm> #include &