最小栈
思路:
1. 首先实例化两个栈,分别是stack用于存放数据,minstack用于存放最小值
2. 将第一个元素压入两个栈中,判断此时若minStack栈中为空,则表示压入的为第一个数据
if ( minStack.empty () ) {
minStack.push(val);
}
3. 将要压入stack栈内的元素与minStack做比较若要插入的值val小于minStack的栈顶元素,则压入minStack,否则,不压入
int topVal=minStack.peek();
if(val<=topVal){
minStack.push(val);
}
4. 当stack中的元素要出栈时,与minStack中的栈顶元素比较,若相等,则表示出栈元素为最小值,那么让minStack栈顶元素也出栈
public void pop() {
int val=stack.pop();
if(val==minStack.peek()){
minStack.pop();
}
}
完整代码如下:
class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack() {
stack=new Stack<>();
minStack=new Stack<>();
}
public void push(int val) {
stack.push(val);
if(minStack.empty()){
minStack.push(val);
}else{
int topVal=minStack.peek();
if(val<=topVal){
minStack.push(val);
}
}
}
public void pop() {
int val=stack.pop();
if(val==minStack.peek()){
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.peek();
}
}