题解 | #包含min函数的栈#
包含min函数的栈
https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
解题思路:
维护两个栈:一个原始栈,一个最小值栈,最小值栈的栈顶保存着当前原始栈的最小值;两个栈同时push
和pop
; 题解参考包含min函数的栈
这里要注意的是:
- 如果想通过一个
min
来维护当前原始栈的最小值,在push
时minStack.push(min)
没问题 - 但是在
pop
时,就需要对min
进行处理,因为当前的min
有可能是当前栈顶的元素值,因此需要在minStack.pop()
后,通过min = minStack.peek()
,修正min
在最小值栈中的“指向“。
参考代码:
import java.util.*; import java.util.Stack; public class Solution { public Stack stack = new Stack(); public Stack minStack = new Stack(); public int min = Integer.MAX_VALUE; public void push(int node) { if(node < min){ min = node; } stack.push(node); minStack.push(min); } public void pop() { stack.pop(); minStack.pop(); min = minStack.peek(); //pop时需要修改min值 } public int top() { return stack.peek(); } public int min() { return minStack.peek(); } }