每日一題——最小棧問題
阿新 • • 發佈:2018-12-09
設計一個支援 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.
class MinStack { private List<Integer> data; // store elements /** initialize your data structure here. */ public MinStack() { data = new ArrayList<>(); } public void push(int x) { if(data.isEmpty() || x <= data.get(data.size()-1)) { data.add(x); data.add(x); return; } if(x > data.get(data.size()-1)) { int min = data.get(data.size()-1); data.add(x); data.add(min); return; } } public void pop() { if(data.isEmpty() == false) { data.remove(data.size() - 1); data.remove(data.size() - 1); } } public int top() { return data.get(data.size()-2); } public int getMin() { return data.get(data.size()-1); } }
雙進雙出,最小為棧頂元素