最小栈
设计一个栈,支持O(1)push,pop,min和堆的区别是啥?
堆中的pop的是min O(logN),栈pop的是栈顶,min需要两个栈。
最大栈
实现push O(logN),pop,top ,peekMax O(logN),popMax O(logN)
popMax需要两个栈,暴力的话,时间复杂度为O(n)
popMax优化:
一个更快的方法,使用heap+stack+hashset结合的方法,用hashset的作用是标记被pop和popMax的那些数,用heap的作用是为了快速找到大的数,用stack的作用是为了找到位置上最大的数。
如何处理重复的数?
两个栈实现队列
时间复杂度:O(1):各栈分别进出一次而不是多次,平均下来依然是O(1)
两个队列实现栈
pop之后交换两个队列的名字
push和isEmpty时间复杂度是O(1),pop和top时间复杂度是O(N)