https://leetcode-cn.com/problems/min-stack/description/
原始代码
class MinStack {
ArrayList<Integer> stack;
int pointer;
int min;
/** initialize your data structure here. */
public MinStack() {
stack = new ArrayList<>();
pointer = -1;
min = Integer.MAX_VALUE;
}
public void push(int x) {
stack.add(x);
if(x<min) {min = x;}
pointer++;
}
public void pop() {
if(pointer==0) {stack.remove(pointer--); min = Integer.MAX_VALUE;}
else if(stack.get(pointer)==min)
{
stack.remove(pointer--);
ArrayList stack1 = (ArrayList)stack.clone();
Collections.sort(stack1);
min = (int)stack1.get(0);
}
else stack.remove(pointer--);
}
public int top() {
return stack.get(pointer);
}
public int getMin() {
return min;
}
}
优化方向及其他思路
①用栈保存最小值,简化pop()
②用 队列,栈,数组各实现一次
优化版
class MinStack {
ArrayList<Integer> stack;
ArrayList<Integer> min;
int pointer;
int mmin;
/** initialize your data structure here. */
public MinStack() {
stack = new ArrayList<>();
min = new ArrayList<>();
pointer = -1;
mmin = Integer.MAX_VALUE;
}
public void push(int x) {
stack.add(x);
if(x<mmin) { min.add(x); mmin=x; }
else min.add(mmin);
pointer++;
}
public int top() {
return stack.get(pointer);
}
public void pop() {
if(pointer==0) mmin = Integer.MAX_VALUE;
else mmin = min.get(pointer-1);
stack.remove(pointer);
min.remove(pointer--);
}
public int getMin() {
return min.get(pointer);
}
}