问题:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
【要求】 1.pop、push、getMin操作的时间复杂度都是O(1)。 2.设计的栈类型可以使用现成的栈结构。
思路:
具体代码实现:
package cn.itcats.array;
import java.util.Stack;
/**
* 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
* @author fatah
*/
public class MySatck {
private Stack<Integer> dataStack;
private Stack<Integer> minStack;
public MySatck() {
this.dataStack = new Stack<>();
this.dataStack = new Stack<>();
}
public void push(int value) {
if(this.minStack.isEmpty()) {
this.minStack.push(value);
}else if(value < this.getMin()) {
this.minStack.push(value);
}else {
this.minStack.push(this.getMin());
}
this.dataStack.push(value);
}
public Integer pop() {
if(this.dataStack.isEmpty()) {
throw new RuntimeException("栈为空");
}
this.minStack.pop();
return this.dataStack.pop();
}
public int getMin() {
if(this.minStack.isEmpty()) {
throw new RuntimeException("栈为空");
}
return this.minStack.peek();
}
}