首页 > 试题广场 >

单调栈结构

[编程题]单调栈结构
  • 热度指数:3605 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。


输入描述:
第一行输入一个数字 n,表示数组 arr 的长度。

以下一行输出 n个数字,表示数组的值。


输出描述:
输出n行,每行两个数字 L 和 R,如果不存在,则值为-1,下标从0开始。
示例1

输入

7
3 4 1 5 6 2 7

输出

-1 2
0 2
-1 -1
2 5
3 5
2 -1
5 -1

备注:

头像 Yjnull2
发表于 2019-09-25 11:56:47
单调栈题解 单调栈结构 牛客链接 方法:单调栈 这里维护一个单调递增栈,可以找到比当前元素要小的元素。 算法约定:当前元素 cur,栈顶元素 top,出栈的栈顶元素 tempTop 遍历数组 如果当前元素大于栈顶元素,则入栈(入栈元素索引,而不是值) 否则,将栈顶元素出栈,此时,离 tempTop 展开全文
头像 华科不平凡
发表于 2020-08-27 11:06:09
单调栈,顾名思义,栈中的内容是单调的,我们可以利用这里特性解决一些有趣的问题,如: 水池问题: 给定一组高度,如[0,1,0,2,1,0,1,3,2,1,2,1],返回可以装的水量6 最大面积问题:给定一组高度如[2,1,5,6,2,3],返回最大矩形面积10 题目中要求所有值左边👈和右边👉 展开全文
头像 非逆
发表于 2022-03-31 12:39:33
本题解使用从栈顶到栈底单调递减的栈。 遍历整个数组的索引,若栈为空,则将该索引放入栈里,若栈不为空,则比较栈顶索引对应的值与当前遍历到的索引对应的值。 1、若栈顶索引对应的值较小,则继续将当前遍历到的索引放入栈中 2、若栈顶索引对应的值较大,则将该索引从栈顶弹出。 _ = input() nums 展开全文
头像 梦幻泡影123
发表于 2021-03-18 18:33:42
单调栈即指从栈顶到栈底的元素是单增或者单减的,本题是想要查找到每个位置左右两边最近的小于它的位置,所以使用单调递减的栈。方法是遍历整个数组的索引,若栈为空,则将该索引放入栈里,若栈不为空,则比较栈顶索引对应的值与当前遍历到的索引对应的值。1、若栈顶索引对应的值较小,则继续将当前遍历到的索引放入栈中, 展开全文
头像 zxy741
发表于 2022-04-13 15:49:40
单调栈,cin会超时 #include <iostream> #include <stack> #include <vector> #include <cstring> using namespace std; int main() { i 展开全文
头像 龟行
发表于 2022-03-28 11:59:54
数组中含重复元素的情况下,寻找每个元素左边和右边比当前元素小的位置。 单调栈实现 思路:栈内元素是一个链表,用链表保存相同元素出现的所有位置,然后出栈的时候依次遍历每个位置。 实现:使用vector实现不定长的数组,取最后一个元素是back()操作 ">#include<stack> # 展开全文
头像 Qadccccc
发表于 2020-11-08 14:14:45
题目链接https://www.nowcoder.com/ta/programmer-code-interview-guide // 1. 定义两个数组Left[] 保存左边小值。 Right保存右边小值。// 2. 定义Stack 保存单调递增的下标值。// 3.循环遍历整个数组//栈为空入栈[ 展开全文
头像 1号牛客
发表于 2020-10-04 09:52:03
当我脑子里出现这个轨迹时,单调栈的原理全想明白了 5 3 4 2 1 import java.util.*; import java.io.*; public class Main{ public static void main(String[] 展开全文