思路:
用另外一个单调栈来保存当前数据栈的最小值,
如果当前值小于单调栈的栈顶或者单调栈里面没有值,就把该元素同时压入数据栈和单调栈,
如果弹出时,数据栈的栈顶和单调栈的栈顶一样,就也弹出单调栈,因为这个最小值用不到了
Stack [HTML_REMOVED] stack = new Stack<>();
Stack[HTML_REMOVED]stackmini = new Stack<>();
public void push(int x) {
stack.push(x);
if(stackmini.isEmpty()||x<=stackmini.peek()){
stackmini.push(x);
}
}
public void pop() {
if(stack.peek().equals(stackmini.peek())){
stackmini.pop();
}
stack.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return stackmini.peek();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
这里有个很坑的地方,如果像我基础一样薄弱的人肯定会踩
在判断两个栈顶是否相等时我第一遍写的是stack.peek() == stackmini.peek()
在提交的时候一直不能通过,报的是空指针异常,无解把等号改成
stack.peek().equals(stackmini.peek())就好了!!!!!!!!
版权声明:本文为CSDN博主「J-Proton」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30519765/article/details/99007448