首页 > 其他 > 详细

单调栈

时间:2019-08-23 12:41:33      阅读:155      评论:0      收藏:0      [点我收藏+]

1,何为单调栈

顾名思义就是一个栈内元素满足单调性的栈,分为单调增栈与单调减栈。

2,怎样维护一个单调栈

(1)当新元素在单调性上优于栈顶时(单增栈新元素比栈顶大,单减栈新元素比栈顶小),压栈,栈深+1;

(2)当新元素在单调性与栈顶相同(新元素于栈顶相同)或劣于栈顶时(单增栈新元素比栈顶小,单减栈新元素比栈顶大),弹栈,栈深-1;

3,单调栈的实现

还是以单调增栈为例。

 1 for(int i=1;i<=n;i++)
 2     {
 3         scanf("%d%d",&w,&h);
 4         while(s[top]>=h)
 5         {
 6             if(s[top]>h&&top>0) top--;
 7             else top--,ans--;
 8         }
 9         s[++top]=h; 
10     }

注意,弹栈时要保证top>0,以防新元素为负数进入死循环。

单调栈

原文:https://www.cnblogs.com/Hoyoak/p/11399153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!