1.本题知识点
栈
2. 题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
3. 思路
此题需要借助辅助栈,存储最小值,具体过程看图解:
如上图, 每次压入数据栈时,需要比较辅助栈中最小值(末尾元素)的大小,小的话追加到辅助栈末尾,否则再复制一份最小值追加到辅助栈末尾。
Java版本:
import java.util.Stack;
public class Solution {
private Stack<Integer> s_data = new Stack<>();
private Stack<Integer> s_assist = new Stack<>();
public void push(int node) {
s_data.push(node);
if(s_assist.isEmpty() || node < s_assist.lastElement()){
s_assist.push(node);
}
else{
s_assist.push(s_assist.lastElement());
}
}
public void pop() {
if(!s_data.isEmpty() && !s_assist.isEmpty()){
s_data.pop();
s_assist.pop();
}
}
public int top() {
return s_data.firstElement();
}
public int min() {
return s_assist.lastElement();
}
}