設計一個支持?push
?,pop
?,top
?操作,并能在常數時間內檢索到最小元素的棧。
實現?MinStack
?類:
MinStack()
?初始化堆棧對象。void push(int val)
?將元素val推入堆棧。void pop()
?刪除堆棧頂部的元素。int top()
?獲取堆棧頂部的元素。int getMin()
?獲取堆棧中的最小元素。
示例 1:
輸入: ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]]輸出: [null,null,null,null,-3,null,0,-2]
思路:
正常在getMin新建輔助棧,獲取最小值時時間會超限
所以,在該類開始時就建立兩個棧,一個用來存放數據,一個存放每個數據存入時更新的最小值
對兩個棧同時做push和pop操作,確保兩者對應正確
class MinStack {Stack<Integer> stack;Stack<Integer> minStack;public MinStack() {stack = new Stack<>();minStack = new Stack<>();minStack.push(Integer.MAX_VALUE);}public void push(int val) {stack.push(val);minStack.push(Math.min(val, minStack.peek()));}public void pop() {if(!stack.isEmpty())stack.pop();minStack.pop();}public int top() {if (!stack.isEmpty()){return stack.peek();}else return -1;}public int getMin() {if (stack.isEmpty()) {return -1;}int min = minStack.peek();return min;}
}