题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
解题思路
栈的push操作:首先判断stack是不是空栈,如果是空栈,对stack和min_stack都进行push操作,如果node小于stack的栈顶元素,也是对stack和min_stack都进行push操作,否则只需对stack进行push操作。
栈的pop操作:当stack和min_stack值相同时进行pop操作,否则对stack进行pop操作。
栈的min;直接返回min_stack的顶元素。
栈的top:直接调用peek()函数即可。
题目链接.
代码块
import java.util.Stack;
public class Solution {
static Stack<Integer> stack=new Stack();
static Stack<Integer> min_stack=new Stack();
public void push(int node) {
if(stack.isEmpty()){
stack.push(node);
min_stack.push(node);
}
else if(node<=min_stack.peek()){
stack.push(node);
min_stack.push(node);
}
else{
stack.push(node);
}
}
public void pop() {
if(stack.peek()!=min_stack.peek()){
stack.pop();
}
else{
stack.pop();
min_stack.pop();
}
}
public int top() {
return stack.peek();
}
public int min() {
return min_stack.peek();
}
}