[leetcode/lintcode 题解] Google面试题:带最小值操作的栈
实现一个栈, 支持以下操作:
- push(val) 将 val 压入栈
- pop() 将栈顶元素弹出, 并返回这个弹出的元素
- min() 返回栈中元素的最小值
要求 O(1) 开销.
在线评测地址:领扣官网题库
样例:
输入: push(1) min() push(2) min() push(3) min()输出: 1 1 1算法:最小栈
思路:
- 要求O(1)时间内完成所有操作,压入栈弹和出栈顶元素并返回本来就是O(1)没有问题,要返回栈中元素最小值也是O(1)就需要一个辅助栈。
- 在压入新元素时,如果辅助栈为空或者辅助栈顶元素大于新元素,那么新元素就是目前最小值,压入新元素;如果辅助栈顶元素小于新元素,那么再次压入栈顶元素。
- 在弹出元素时,辅助栈跟着一起弹出栈顶元素。
- 这样就满足了辅助栈内存储的最小值与存储数据的栈同步,查询最小值的操作是O(1)的。
复杂度:
- 空间复杂度取决于输入的数据
- 时间复杂度O(1)
public class MinStack { Stack<Integer> stack, minStack; public MinStack() { stack = new Stack<Integer>(); minStack = new Stack<Integer>(); } /* * @param number: An integer * @return: nothing */ public void push(int number) { stack.push(number); if (minStack.empty() || number < minStack.peek()) { minStack.push(number); } else { minStack.push(minStack.peek()); } } /* * @return: An integer */ public int pop() { minStack.pop(); return stack.pop(); } /* * @return: An integer */ public int min() { return minStack.peek(); }}更多题解参考:九章官网solution
浙公网安备 33010602011771号