这题的意思是要弄个辅助栈;因为它需要的栈结构是能够在o(1)时间返回最小值的,即若我们定义的栈类为stack,那么它又一个min方法,stack.min()返回最小值;
那么我们就要个辅助栈,当原始的栈添加节点时,如果新添加的节点小于辅助栈栈顶的节点时,就同时往辅助栈里添加节点,如果节点的值大于辅助站顶点的值,就继续添加最小值min(辅助栈栈顶元素);这样的话辅助栈的栈顶始终就是最小值min;需要注意的是出栈的时候,如果出栈的是最小值,辅助栈也要出栈;
答案抄的
import java.util.Stack;
import java.util.Arrays;
public class Solution {
/*借用辅助栈存储min的大小,自定义了栈结构
*/
private int size;
private int min = Integer.MAX_VALUE;
private Stack<Integer> minStack = new Stack<Integer>();
private Integer[] elements = new Integer[10];
public void push(int node) {
ensureCapacity(size+1);
elements[size++] = node;
if(node <= min){
minStack.push(node);
min = minStack.peek();
}else{
minStack.push(min);
}
// System.out.println(min+"");
}
private void ensureCapacity(int size) {
// TODO Auto-generated method stub
int len = elements.length;
if(size > len){
int newLen = (len*3)/2+1; //每次扩容方式
elements = Arrays.copyOf(elements, newLen);
}
}
public void pop() {
Integer top = top();
if(top != null){
elements[size-1] = (Integer) null;
}
size--;
minStack.pop();
min = minStack.peek();
// System.out.println(min+"");
}
public int top() {
if(!empty()){
if(size-1>=0)
return elements[size-1];
}
return (Integer) null;
}
public boolean empty(){
return size == 0;
}
public int min() {
return min;
}
}