我在stack中封装一个ArrayList,调用ArrayList自己的方法
class MinStack {
/** initialize your data structure here. */
int top;
ArrayList<Integer> v;
public MinStack() {
top = -1;
v = new ArrayList<Integer>();
}
public void push(int x) {
v.add(x);
top++;
}
public void pop() {
v.remove(top);
top--;
}
public int top() {
return v.get(top);
}
public int min() {
int min = Integer.MAX_VALUE;
for (int i = 0; i < v.size(); i++) {
if(v.get(i) < min)min=v.get(i);
}
return min;
}
}
看了一下题解,他是用了两个栈,其中的一个栈放数据,另一个栈放数据栈位置对应位置的最小值,也就是说,每次数据入栈时,在最小值栈放入一个数据栈中的最小值(最小值栈的栈顶和放入的数据的最小值)出栈的时候也一起出栈。所以最小值函数就是返回最小值栈的栈顶
class MinStack {
Deque<Integer> xStack;
Deque<Integer> minStack;
public MinStack() {
xStack = new LinkedList<Integer>();
minStack = new LinkedList<Integer>();
minStack.push(Integer.MAX_VALUE);
}
public void push(int x) {
xStack.push(x);
minStack.push(Math.min(minStack.peek(), x));
}
public void pop() {
xStack.pop();
minStack.pop();
}
public int top() {
return xStack.peek();
}
public int min() {
return minStack.peek();
}
}