剑指offer:包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
思路分析
对于本题构造两个栈(stack和min)
push():向stack中压入元素时,如果stack为空或压入的新数据小于等于min的栈顶元素时,将新数据压入min。
pop():如果stack弹出元素的值等于min的当前栈顶元素,则弹出min的当前栈顶元素。
top():最后一个压入的数据,直接返回stack的栈顶元素。
min():压入的数据中的最小数据,直接返回min的栈顶元素。
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int node) {
//stack为空,将元素压入min 或者 node小于等于min的栈顶元素
//压入12333 等号保证压入12333而不是123
if(stack.isEmpty() || node <= minStack.peek()){
minStack.push(node);
}
stack.push(node);
}
public void pop() {
//stack弹出的元素 等于 min的栈顶元素
if(stack.pop() == minStack.peek()){
minStack.pop();
}
}
//最后一个压入的数据
public int top() {
return stack.peek();
}
//压入的数据中的最小数据
public int min() {
return minStack.peek();
}
}

浙公网安备 33010602011771号