什么时候弹栈
扫到 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 &
补全:弹栈比较
补全 next_greater 的弹栈条件:栈顶的值比 a[i] 小才弹。补全后输出第 0 个数的答案。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有
补全:记下答案
补全 next_greater:弹栈之前把 a[i] 记成栈顶那个下标的答案。补全后输出第 0 个数的答案。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,
补全:入栈等待
补全 next_greater:每个下标处理完都要入栈,等着以后被更大的数匹配。补全后输出全部答案。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有记
左边最近更大什么时候读
第 1 步:下面一行填左边最近更大 第 2 步:弹掉不比 5 大的,读栈顶 第 3 步:弹掉不比 3 大的,读栈顶 第 4 步:弹掉不比 4 大的,读栈顶 第 5 步:弹掉不比 2 大的,读栈顶 第 6 步:弹掉不比 6 大的,读栈顶 第
相等的元素怎么处理
求严格更大时,遇到和 a[i] 相等的栈顶,应当【0】。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有记 -1。
这个栈是单调增还是减
求上一个更大元素时,栈从底到顶保持【0】。 本节模型:next_greater / prev_greater 用单调栈(vector 存下标)求右边 / 左边第一个更大的数,没有记 -1。