【面试题】实现一个栈,要求Push(入栈),Pop(出栈),Min/Max(返回最小/大值的操作)的时间复杂度为O(1)
- 方案一:使用一个栈,每次push/pop的时候,都把当前的元素和最大/小值进行入栈/出栈操作
操作 | s1 | min |
---|---|---|
push 4 | 4,4 | 4 |
push 3 | 4,4,3,3 | 3 |
push 5 | 4,4,3,3,5,3 | 3 |
pop | 4,4,3,3 | 3 |
pop | 4,4 | 4 |
pop |
- 方案二:使用两个栈,一个栈存所有的元素,另一个辅助栈存储最大/最小值
操作 | s1 | s2 |
---|---|---|
push 4 | 4 | 4 |
push 3 | 4,3 | 4,3 |
push 3 | 4,3,3 | 4,3,3 |
push 5 | 4,3,3,5 | 4,3,3 |
push 2 | 4,3,3,5,2 | 4,3,3,2 |
push 1 | 4,3,3,5,2,1 | 4,3,3,2,1 |
push 1 | 4,3,3,5,2,1,1 | 4,3,3,2,1,1 |
pop | 4,3,3,5,2,1 | 4,3,3,2,1 |
pop | 4,3,3,5,2 | 4,3,3,2 |
pop | 4,3,3,5 | 4,3,3 |
pop | 4,3,3 | 4,3,3 |
pop | 4,3 | 4,3 |
pop | 4 | 4 |
pop |