问题描述:一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。
可修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。
创建一个类,类里有两个栈,一个栈S1维持正常的push、pop操作,另一个S2保存当前的最大值。
其实我觉得理解好题目是非常重要的,求最大值,想来想去无论怎么样时间复杂度也得为O(n)吧,但是题目并不是这个意思,而是在已有的操作上,进行一步操作,就可以得到最大值。那么这就好做了。
S1:1 2 5 4 3 2 9
S2:5 9
进栈的元素时候如果为比S2的栈顶要大,则为最大值,同时push S1 and S2。否则,只进栈S1(S1为原始栈)。
同样,出栈的时候,直接检查S2和S1的是否