CS-Notes/docs/notes/30. 包含 min 函数的栈.md
2020-11-04 01:40:59 +08:00

46 lines
1.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 30. 包含 min 函数的栈
## 题目链接
[牛客网](https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
## 题目描述
实现一个包含 min() 函数的栈该方法返回当前栈中最小的值
## 解题思路
使用一个额外的 minStack栈顶元素为当前栈中最小的值在对栈进行 push 入栈和 pop 出栈操作时同样需要对 minStack 进行入栈出栈操作从而使 minStack 栈顶元素一直为当前栈中最小的值在进行 push 操作时需要比较入栈元素和当前栈中最小值将值较小的元素 push minStack
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20201104013936126.png" alt="image-20201104013936126" style="zoom:50%;" /> </div><br>
```java
private Stack<Integer> dataStack = new Stack<>();
private Stack<Integer> minStack = new Stack<>();
public void push(int node) {
dataStack.push(node);
minStack.push(minStack.isEmpty() ? node : Math.min(minStack.peek(), node));
}
public void pop() {
dataStack.pop();
minStack.pop();
}
public int top() {
return dataStack.peek();
}
public int min() {
return minStack.peek();
}
```
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>