剑指offer30.包含min函数的栈
题目描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/5725f661f9544b9db015a3a79153c713.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz5ZCD5p2P5bmy,size_20,color_FFFFFF,t_70,g_se,x_16)
C++解答
#pragma once
#include<stack>
#include <stack>
#include <assert.h>
#include<iostream>
using namespace std;
class MinStack
{
public:
MinStack() {}
void push(int x);
void pop();
int top();
int min();
private:
stack<int> st1;
stack<int> st2;
};
void MinStack::push(int x) {
if (!st1.empty())
{
int m = st1.top();
int n = st2.top();
if (x > n)
{
st1.push(x);
st2.push(n);
}
else
{
st1.push(x);
st2.push(x);
}
}
else {
st1.push(x);
st2.push(x);
}
}
void MinStack::pop() {
st1.pop();
st2.pop();
}
int MinStack::top() {
return st1.top();
}
int MinStack::min() {
return st2.top();
}
void test()
{
MinStack minStack ;
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
int m = minStack.min();
cout << m << endl;
minStack.pop();
int n = minStack.top();
cout << n << endl;
int k = minStack.min();
cout << k << endl;
}
int main()
{
test();
return 0;
}
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/5f80c2cc37c346c2b35f10bf2b3fe270.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz5ZCD5p2P5bmy,size_20,color_FFFFFF,t_70,g_se,x_16)