题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))
思路
创建两个栈A,B,A用于存放用于存放正常数据,B用于存放A中的最小值
1、入栈
(1)将要入栈的数直接入到A中;
(2)此时,若B为空,将该数再次入到B中;
(3)若B不为空,则取B的栈顶元素,与该数进行比较,将较小的数入到B中
2、出栈
(1)若A为空,直接返回null
(2)A不为空,A,B同时出栈
3、取栈顶元素
(1)A为空,直接返回null
(2)A不为空,直接取A的栈顶元素
4、检索栈中最小值
(1)B为空,直接返回null
(2)B不为空,直接取B的栈顶元素
代码
import java.util.Stack;
public class Solution {
Stack<Integer> A = new Stack<>(); //用于存放数据
Stack<Integer> B = new Stack<>();//用于存放栈中的最小值
public void push(int node) {
A.push(node);
if(B.isEmpty()){
B.push(node);
}else{
int min = B.peek();
if(min >node){
B.push(node);
}else{
B.push(min);
}
}
}
public void pop() {
if(A.isEmpty()){
return;
}
B.pop();
A.pop();
}
public Integer top() {
if(A.isEmpty()){
return null;
}
return A.peek();
}
public Integer min() {
if(B.isEmpty()){
return null;
}
return B.peek();
}
}