155. 最小栈(C++题解含VS可运行源程序)
1.题解
辅助栈
使用辅助栈:两个辅助栈(一个数据栈,一个最小值栈)
2.力扣C++源码
class MinStack {
public:
MinStack() {
}
void push(int val) {
s1.push(val);
if (minS.empty() || minS.top() >= val) {
minS.push(val);
}
}
void pop() {
if (minS.top() == s1.top())
minS.pop();
s1.pop();
}
int top() {
return s1.top();
}
int getMin() {
return minS.top();
}
//使用辅助栈
stack<int> s1, minS;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(val);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
3.VS可运行源程序
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<limits>
#include<algorithm>
#include<math.h>
#pragma warning(disable:4996)
using namespace std;
//使用辅助栈:两个辅助栈(一个数据栈,一个最小值栈)
class MinStack {
public:
MinStack() {
}
void push(int val) {
s1.push(val);
if (minS.empty() || minS.top() >= val) {
minS.push(val);
}
}
void pop() {
if (minS.top() == s1.top())
minS.pop();
s1.pop();
}
int top() {
return s1.top();
}
int getMin() {
return minS.top();
}
//使用辅助栈
stack<int> s1, minS;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(val);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
int main()
{
MinStack* obj = new MinStack();
obj->push(-2);
obj->push(0);
obj->push(-3);
printf("此时栈中最小值为:%d\n", obj->getMin());
obj->pop();
printf("此时栈顶元素为:%d\n", obj->top());
printf("此时栈中最小值为:%d", obj->getMin());
printf("\n");
system("pause");
return 0;
}