题目
题解
一开始错误的点:用一个整型变量min记录栈中最小值,每次入栈的时候更新,错误原因是如果当前min出栈了,那么最小值该怎么更新?还得重新从栈里找
解决方法:既然用一个变量记录最小值行不通,那我们就用一组变量,即一个栈来记录最小值
- 每个元素入栈的时候都记录下 当前元素 和 最小值栈
min_stack
栈顶(即之前最小的元素) 谁更小,更小的元素进入最小值栈 - 元素出栈的时候,最小值栈也出栈
简单来说,最小值栈min_stack
记录的就是当前元素及其之前的元素中的最小值 和 这个元素 的一种对应
class MinStack {
private Stack<Integer>stack;
private Stack<Integer>min_stack;//最小值栈
public MinStack() {
stack=new Stack<>();
min_stack=new Stack<>();
min_stack.push(Integer.MAX_VALUE);//注意看java中无穷大怎么表示
}
public void push(int val) {
stack.push(val);
min_stack.push(Math.min(val,min_stack.peek()));
}
public void pop() {
stack.pop();
min_stack.pop();//最小值栈一同出栈
}
public int top() {
return stack.peek();//java中返回栈顶的操作是peek()
}
public int getMin() {
return min_stack.peek();
}
}
时间复杂度: O ( 1 ) O(1) O(1)
空间复杂度: O ( n ) O(n) O(n)
p.s. 最近在准备论文分享,时间有点紧,就刷道水题来打卡了