题意
- 设计一个支持push,pop,top和在恒定时间内检索最小元素的堆栈。
- push(x) - 将元素x推入堆栈。
- pop() - 删除堆栈顶部的元素。
- top() - 获取顶部元素。
- getMin() - 检索堆栈中的最小元素。
思路
提供两个栈一个还是存放数另一个存放在栈中的最小值
首先考虑push方法
当向栈中压入数的时候需要考虑最小栈中的数是否为空是否比栈顶的数大。
/**
* 压栈
* @param x
*/
public void push(int x) {
if (minstack.isEmpty()){
minstack.push(x);
}else {
if (this.getMin()<=x){
minstack.push(this.getMin());
}else {
minstack.push(x);
}
}
stack.push(x);
}
检索堆栈中的最小元素
得到最小数
public int getMin() {
if (minstack.isEmpty()) return 0;
return minstack.peek();
}
获取顶部元素
public int top() {
if (stack.isEmpty()) return 0;
Integer value = this.stack.peek();
return value;
}
删除堆栈顶部的元素
考虑到两个栈都需要
/**
* 需要调整最小栈的数
*/
public void pop() {
if (stack.isEmpty()) return ;
this.stack.pop();
this.minstack.pop();
}