题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路解析:
- 每次都要记录栈的最小值,如果入栈的元素比原来的小,那就更新最小值
- 每次出栈后,最小值如果出栈了,那么就变成记录次小值了
- 那这样的话,原数据栈中入栈一个元素,就会有一个此时的最小值记录下来,但是当此数据出栈后,就是次小值的。这样就需要一个辅助栈stack_min来表示入栈的每一个元素对应的栈的最小值
![](https://i-blog.csdnimg.cn/blog_migrate/88daa364572958c646595d3caef9cd9e.png)
代码:
import java.util.Stack;
public class Solution {
Stack<Integer> stack_data=new Stack<>();//装原数据的数据栈
Stack<Integer> stack_min=new Stack<>();//装最小值的数据栈
public void push(int node) {
stack_data.push(node);//原数据正常入栈
if(stack_min.isEmpty()){//最小值入栈的方式
stack_min.push(node);//数据为空的话直接入栈
}else if(node<min()){//比最小值还小,那就入栈
stack_min.push(node);
}else{//比最小值还大,那就再次装入最小值一次
stack_min.push(min());
}
}
public void pop() {//出栈都要把栈顶元素弹出
stack_data.pop();
stack_min.pop();
}
public int top() {
return stack_data.peek();
}
public int min() {
return stack_min.peek();
}
}