題目:
請設計一個棧,除了常規棧支持的pop與push函數以外,還支持min函數,該函數返回棧元素中的最小值。執行push、pop和min操作的時間複雜度必須爲O(1)。
例:
MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(0);
minStack.push(-4);
minStack.getMin(); --> 返回 -4.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -1.
Code(JAVA):
package cn.leetcode.study.stack;
import java.util.Stack;
public class MinStack {
private Stack<Integer> tmpStack;
private Stack<Integer> minValueStack;
/**
* initialize your data structure here.
*/
public MinStack() {
tmpStack = new Stack<>();
minValueStack = new Stack<>();
}
public void push(int x) {
tmpStack.push(x);
if (minValueStack.isEmpty()) {
minValueStack.push(x);
} else {
Integer peek = minValueStack.peek();
if (peek < x) {
minValueStack.push(peek);
} else {
minValueStack.push(x);
}
}
}
public void pop() {
if (!tmpStack.isEmpty()) {
tmpStack.pop();
minValueStack.pop();
}
}
public int top() {
return tmpStack.peek();
}
public int getMin() {
return minValueStack.peek();
}
}
感謝您的支持,請您關注作者公衆號: