Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.rst

Next Greater Element下一个较大元素

一个元素的Next Greater Element(NGE),就是之后的元素里,第一个比该元素大的数。若没有这样的数,则NGE为-1。

求出一个数组中,所有元素的“下一个较大元素”。

暴力解法

双层循环。对于每个元素,向右寻找比它大的元素。

使用栈

思路:顺序扫描数组,对于每个元素x,都要看看栈顶元素是否小于x。若小于,则将其弹出,x就是其下一个较大元素。持续弹出元素,直到栈顶元素大于x(此时,栈中已没有比x小的元素)时停止。最后,将x入栈,开始下一轮循环。

这样会不会漏掉可能的元素呢?比如,会不会出现栈中元素为[1, 4],x为3的情况?答案是肯定不会的。由于4比1大,在前一轮循环中,x的值为4,1必定已经弹出了。

推论:任何时候,栈中元素都是递减的。我们可以证明一下:设栈中元素为:

[a, b, c, d]

如果b < c的话,那么在压入c之前,b就已经弹出了,那么b就不可能还在栈中,这与事实相矛盾。因此,b必然大于c。此结论适用于任何两个相邻元素,因此栈中元素从左到右是递减的。