版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/85267018
题目:
设计一个支持 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 int top;
private int [] elem;
/** initialize your data structure here. */
public MinStack() {
this.top=0;
this.elem=new int[10];
}
public boolean isFull(){
if(top==elem.length)
return true;
return false;
}
public void push(int x) {
if(isFull()){
elem=Arrays.copyOf(elem,2*elem.length);
}
if(top==0){
elem[top++]=x;
}else if(elem[top-2]<x){
elem[top]=elem[top-2]; //这个地方需要注意,两边都用top来确定,左边就不能用top++ 否则会影响右边的赋值
top++;
}else{
elem[top++]=x;
}
elem[top++]=x;
}
public boolean isEmpty(){
if(top==0)
return true;
return false;
}
public void pop() {
top-=2;
}
public int top() {
return elem[top-1];
}
public int getMin() {
return elem[top-2];
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/