min = data[--top]; // 拿到原最小值,并(将原最小值)出栈
}
--top; // 出栈
}
// 查找栈顶元素
public int top() {
return data[top];
}
// 查询最小值
public int min() {
return min;
}
}
上述代码在 LeetCode 的执行结果如下:
可以看出功用还是很高的,超越了 99.92% 的用户,内存消耗也不大。它的中心代码在 push 办法内,先将原最小值和最新最小值相继入栈,在 pop 出栈时判别出栈元素能否为最小值,假设是最小值则将以后最小值指向栈顶元素并将栈顶元素出栈,这样就失掉了下一个新的最小值了。
实现代码2
假设我们不想运用数组的自定义栈来完成,还可以运用 Java 中自带的栈 Stack 来完成此功用,代码如下:
class MinStack {
private Stack<Integer> stack = new Stack<>();
private int min = Integer.MAX_VALUE;
public MinStack() { }
// 入栈(添加元素)
public void push(int x) {
if (x <= min) {
// 遇到了更小的值,记载原最小值(入栈)
stack.push(min);
min = x;
}
stack.push(x);
}
// 出栈(移除栈顶元素)
public void pop() {
if (stack.pop() == min) {
min = stack.pop(); // 取出原最小值
}
}
// 查找栈顶元素
public int top() {
return stack.peek();
}
// 查询最小值
public int min() {
return min;
}
}
(责任编辑:admin)