题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
题目解析
Java里Stack的peek方法是返回栈顶的元素但不移除它,但Stack的pop方法是会移除的。
题目答案
import java.util.Stack; public class Solution { private Stack<Integer> dataStack= new Stack<>();//数据栈
private Stack<Integer> minStack= new Stack<>();//最小数的栈 public void push(int node) {
dataStack.push(node);
if(minStack.isEmpty() || minStack.peek()>dataStack.peek()){
minStack.push(dataStack.peek());
}
else minStack.push(minStack.peek());
} public void pop() {
if(!dataStack.isEmpty()) dataStack.pop();
if(!minStack.isEmpty()) minStack.pop();
} public int top() {
return dataStack.peek();// 取出数据栈的栈顶元素
} public int min() {
return minStack.peek();//取出含min函数的栈的栈顶元素
}
}