题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路
- 内部使用两个栈解题,一个栈用于正常的栈操作,另一个栈用于min相关操作。
- 当要push一个元素时,首先与min的栈顶元素比较,若小于,则将其压入min栈中,若大于,则min栈重复压入栈顶元素。
- 当要pop一个元素时,min栈和normal栈正常pop即可。
- 当要获取最小元素,直接弹出min栈的栈顶元素即可。
Java代码实现
import java.util.Stack;
public class Solution {
private Stack<Integer> all = new Stack();
private Stack<Integer> min = new Stack();
public void push(int node) {
if(min.isEmpty()){
min.push(node);
}else{
if(min.peek()>node){
min.push(node);
}else{
min.push(min.peek());
}
}
all.push(node);
}
public void pop() {
if(all.isEmpty()){
throw new RuntimeException("stack is empty");
}
all.pop();
min.pop();
}
public int top() {
if(all.isEmpty()){
throw new RuntimeException("stack is empty");
}
return all.peek();
}
public int min() {
if(min.isEmpty()){
throw new RuntimeException("stack is empty");
}
return min.peek();
}
}













网友评论