题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈中
所含最小元素的min函数(时间复杂度应为O(1))。
思路:
1. 使用一个辅助栈
2. 初始时,都为空
3. 放入第一个元素时,数据栈和辅助栈都放入同一个元素
4. 当放入第二个甚至更多个的元素时,数据栈正常放入数据,辅助栈中放入较小的数据
5. 弹栈都同时弹出栈顶元素
6. 辅助栈的栈顶一直都是最小元素
代码
public class StackWithMin {
private Stack<Integer> data_s = new Stack<>();
private Stack<Integer> min_s = new Stack<>();
public void push(int node) {
if(min_s.empty()) {
min_s.push(node);
}
else {
if(node < min_s.peek()) {
min_s.push(node);
}
else
min_s.push(min_s.peek());
}
data_s.push(node);
}
public void pop() {
data_s.pop();
min_s.pop();
}
public int top() {
return data_s.peek();
}
public int min() {
return min_s.peek();
}
}
根据费曼学习法: 学习到的东西只有输出了才能巩固得更好。
来源:https://blog.csdn.net/liumihan/article/details/100535115