题目描述:
实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
CODE
import java.util.*;
public class Main{
public static void main(String[]args){
getMinStack ms = new getMinStack();
Scanner scanner = new Scanner(System.in);
int N = Integer.valueOf(scanner.nextLine());
for(int i=0;i<N;i++){
String line = scanner.nextLine();
if(line.startsWith("push")){
String[] num = line.split(" ");
int op = Integer.valueOf(num[1]);
ms.push(op);
}else if(line.startsWith("pop")){
ms.pop();
}else if(line.startsWith("getMin")){
System.out.println(ms.getMin());
}
}
}
}
class getMinStack{
public Stack<Integer> dataStack;
public Stack<Integer> minStack;
public getMinStack(){
this.dataStack = new Stack<Integer>();
this.minStack = new Stack<Integer>();
}
public void push(Integer x){
//数据栈直接加
dataStack.push(x);
//最小栈 如果加入的不是更大的,才往里加,否则最小是之前的数
if(minStack.isEmpty()|| minStack.peek()>= x){
minStack.push(x);
}
}
public void pop(){
int value = dataStack.pop();
if( minStack.peek()== value){
minStack.pop();
}
}
public Integer getMin(){
return minStack.peek();
}
}
KEYPOINT
2个栈
一个用来正常放数据
另一个是记录最小的栈,push的时候需要注意,栈顶的是当前最小的,只有加入的数据小于等于栈顶,才加入
弹出的时候,数据栈正常弹,如果弹出的数 == min栈的数,则说明是这个数所对应的最小之,则min栈也弹出