52 lines
1.8 KiB
Markdown
52 lines
1.8 KiB
Markdown
## 题目地址
|
||
https://leetcode-cn.com/problems/min-stack/
|
||
|
||
## 思路
|
||
|
||
有的同学一开始会把这道题目想简单了,用一个变量记录最小值不就得了,其实是如果要是弹出了这个最小值的话,我们还要记录次小值,所以需要一个辅助数组来记录次小值。
|
||
|
||
我这里使用数组来实现栈,在用一个数组来放当前栈里最小数值,同时使用辅助数组来记录
|
||
|
||
## C++代码
|
||
|
||
```
|
||
class MinStack {
|
||
public:
|
||
vector<int> vec;
|
||
vector<int> minVec;
|
||
/** initialize your data structure here. */
|
||
MinStack() {
|
||
}
|
||
void push(int x) {
|
||
vec.push_back(x);
|
||
if (minVec.size() == 0) {
|
||
minVec.push_back(x);
|
||
} else if (x <= minVec[minVec.size() - 1]) { // 这里一定是下小于等于,防止多个最小值的情况
|
||
minVec.push_back(x);
|
||
}
|
||
}
|
||
void pop() {
|
||
if (vec.size() == 0) { // 防止下面的操作会导致越界
|
||
return;
|
||
}
|
||
if (vec[vec.size() - 1] == minVec[minVec.size() - 1]) {
|
||
minVec.pop_back();
|
||
}
|
||
vec.pop_back();
|
||
}
|
||
|
||
int top() {
|
||
// 这里有越界的危险,但是题目也没有说如果栈为空,top()应该返回啥,所以就默认测试用例没有上来直接top的用例了
|
||
return vec[vec.size() - 1];
|
||
}
|
||
|
||
int getMin() {
|
||
// 这里有越界的危险,但是题目也没有说如果栈为空,getMin()应该返回啥,所以就默认测试用例没有上来直接getMin的用例了
|
||
return minVec[minVec.size() - 1];
|
||
}
|
||
};
|
||
|
||
```
|
||
> 更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
|
||
|