棧---最小棧
阿新 • • 發佈:2018-12-20
- 題目 設計一個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。 push(x) – 將元素 x 推入棧中。 pop() – 刪除棧頂的元素。 top() – 獲取棧頂元素。 getMin() – 檢索棧中的最小元素。
- 示例
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2.
- 程式碼實現 a.維護兩個棧:正常棧,最小棧。若入棧元素小於等於最小棧的棧頂元素入棧。
class MinStack { private Stack<Integer> stack,minStack; /** initialize your data structure here. */ public MinStack() { //初始化正常棧 stack = new Stack(); //初始化最小棧 minStack = new Stack(); } public void push(int x) { stack.push(x); //若最小棧為空,或入棧元素小於等於最小棧的棧頂元素則入棧 if(minStack.empty()||x<=minStack.peek()){ minStack.push(x); } } public void pop() { int top =stack.pop(); //若出棧元素等於最小棧棧頂元素,最小棧棧頂元素也得出棧 if(minStack.peek()==top){ minStack.pop(); } } public int top() { return stack.peek(); } public int getMin() { return minStack.peek(); } }