单调栈
题目描述
闲聊群里有一个初三的小哥哥,有的人觉得别人才初三,不应该叫他小弟弟吗?哈哈哈。
如果别人问的问题比较简单,那么他应该是一个弟弟。如果问的题我们解决不了那可能就得叫他哥哥了。对吧。
今天这位小“哥哥”又来问问题了。题是这样的:
有n座山,他们连在一起成一条直线,接着从左往右给出每座山的高度a[i],现在的问题是让你求的每座山右边的第一个比它高的山是第几座山呢?如果没有则输出0
解题思路
运用了单调栈的知识,解每座山右边第一个比它高的山的位置,定义一个栈,每次新的数和栈顶作比较,如果比栈顶的数大,把栈顶的数踢出去继续比较。踢出去的数把当前数记录下来就是右边第一个比它高的山。如果比栈顶小,继续入栈。遍历完一遍之后,栈里面的元素就是没有比它大的数。