设计一个有getMin功能的栈
实现一个特殊的栈,在实现栈的基本功能的前提下,实现返回栈中最小元素的操作
方案一:
class MyStack1 {
private Stack<Integer> stackData;
private Stack<Integer> stackMin;
public MyStack1() {
this.stackData = new Stack<Integer>();
this.stackMin = new Stack<Integer>();
}
public void push(int newNum) {
stackData.push(newNum);
if (this.stackMin.isEmpty()) {
stackMin.push(newNum);
} else if (newNum <= this.getMin()) {
stackMin.push(newNum);
}
}
public int pop() {
if (this.stackData.isEmpty()) {
throw new RuntimeException("The Stack is empty");
}
int value = this.stackData.pop();
if (value == this.getMin()) {
this.stackMin.pop();
}
return value;
}
public int getMin() {
if (this.stackData.isEmpty()) {
throw new RuntimeException("The Stack is empty");
}
return stackMin.peek();
}
}
方案二:
class MyStack2 {
private Stack<Integer> StackData;
private Stack<Integer> StackMin;
public MyStack2() {
StackData = new Stack<Integer>();
StackMin = new Stack<Integer>();
}
public void push(int newNum) {
if (this.StackMin.isEmpty()) {
StackMin.push(newNum);
} else if (newNum < this.getMin()) {
StackMin.push(newNum);
} else {
StackMin.push(StackMin.peek());
}
this.StackData.push(newNum);
}
public int pop() {
if (this.StackData.isEmpty()) {
throw new RuntimeException("The Stack is empty");
}
StackMin.pop();
return StackData.pop();
}
public int getMin() {
if (this.StackMin.isEmpty()) {
throw new RuntimeException("The Stack id empty");
}
return StackMin.peek();
}
}