单调栈技巧总结
发布日期:2021-05-09 04:32:36 浏览次数:15 分类:博客文章

本文共 783 字,大约阅读时间需要 2 分钟。

单调栈

单调栈实际上就是栈,只是限制要比普通的栈更严格而已了。要求是每次入栈的元素必须要有序(如果新元素入栈不符合要求,则将之前的元素出栈,直到符合要求再入栈),使之形成单调递增/单调递减的一个栈。

  • 单调递增栈:只有比栈顶小的才能入栈,否则就把栈顶出栈后,再入栈。出栈时可能会有一些计算。适用于求解第一个大于该位置元素的数。
  • 单调递减栈:与单调递增栈相反。适用于求解第一个小于该位置元素的数。

如何判断

单调递增/递减栈是根据出栈后的顺序来决定的。例如,栈内顺序[1, 2, 6],出栈后顺序[6, 2, 1],这就是单调递减栈。

适用场景

单调栈一般用于解决 第一个大于 xxx 或者 第一个小于 xxx 这种题目。

算法模板

int[] ans = new int[T.Length];Stack
stack = new Stack
();for(int i = 0; i < T.Length; i++) { while(stack.Count > 0 && T[i] > T[stack.Peek()]) { int curI = stack.Pop(); ans[curI] = i - curI; } stack.Push(i);}

 

哨兵技巧

对于有些时候,如果会用到数组的全部元素,即栈中的元素最后都要出栈,那么很可能因为没有考虑边界而无法通过。所以我们可以使用 哨兵法

例如在 {1, 3, 4, 5, 2, 9, 6} 末尾添加一个 -1 作为哨兵,变成了 {1, 3, 4, 5, 2, 9, 6, -1} ,这种技巧可以简化代码逻辑。

单调栈题目

以下列出了单调栈的问题,供大家参考。

序号 题目 题解
1  
2  
3  
4    
5    
6  
7    
8  
上一篇:Redis缓存篇(一)Redis是如何工作的
下一篇:Redis基础篇(八)数据分片

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年05月02日 16时45分02秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java.lang.ClassNotFoundException: com.fasterxml.classmate.TypeResolver 2023-01-27
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 2023-01-27
java.lang.ClassNotFoundException后续 2023-01-27
java.lang.IllegalArgumentException: Control character in cookie value or attribute. 2023-01-27
java.lang.IllegalArgumentException: Invalid character found in the request target. 2023-01-27
java.lang.IllegalStateException Failed to load ApplicationContext 解决办法 2023-01-27
java.lang.IllegalStateException: Optional int parameter 'id' is not present but cannot be translated 2023-01-27
java.lang.NoClassDefFoundError+ (wrong name) 2023-01-27
java.lang.NoClassDefFoundError: javax transaction SystemException 解决方法! 2023-01-27
java.lang.NoClassDefFoundError: javax/persistence/EntityListeners解决 2023-01-27
java.lang.NoClassDefFoundError: kotlin/reflect/jvm/internal/KotlinReflectionInternalError 2023-01-27
java.lang.NoClassDefFoundError: org.joda.time.ReadablePeriod错误的处理 2023-01-27
java.lang.NumberFormatException 错误及解决办法 2023-01-27
java.lang.NoClassDefFoundError: org/springframework/core/io/Resource 2023-01-27
java.lang.NoSuchMethodError: org.jaxen.dom4j.DocumentNavigator.getInstance()【可能的解决办法】 2023-01-27
java农业文化旅游管理平台(ssm) 2023-01-27
java农副产品网上预订系统(ssm) 2023-01-27
java农副产品购物app的设计与开发(ssm) 2023-01-27
java农家乐客户管理系统(ssm) 2023-01-27
java农户自产自销线上农产品超市(ssm) 2023-01-27