#include<iostream>
#include<queue>
#include<stack>
using namespace std;
//这题 因为要求要pop push min都是O(1) 因此
//不存在什么到要取最小值的时候再去调用
//而是在创立的时候就直接去找最小值
//顺着这个思路 结合栈的性质 就可以知道本题的解
class MinStack {
private:
stack<int> S1;//利用的栈
int min1;//实时更新的最小值
int t = 0;//作为a数组的指针 指向当前应该的最小值
int a[10000] = { 0 };//数组 储存每次进入的当前比较所得的最小值
//也是本题思路核心
public:
MinStack() {}
void push(int x)
{
if (S1.empty())
{//如果栈为空的话 那么第一个数就是最小值
min1 = x;
a[t]=x;
t++;
}
else if (x <=min1)
{//如果栈不为空的话 那么比较一下最小值和新压入的值
a[t++] = x;
min1 = x;
}
S1.push(x);
}
void pop() {
if (S1.top() == min1)
{//如果要pop的值是最小值 那么说明min1要更新
//而所有的第二最小值就是a[]数组后退一个就行了
t--;
t--;
if (t >= 0)//如果存在的话
{
min1 = a[t];
t++;
}
else
{
min1 = NULL;
t++;
}
}
S1.pop();
}
int top()
{
return(S1.top());
}
int min()
{
if (min1 != NULL)
return min1;
else return NULL;
}
};
int main()
{//测试用例
MinStack* a = new MinStack();
a->push(2147483646);
a->push(2147483646);
a->push(2147483647);
a->pop();
a->top();
a->min();
a->pop();
a->min();
a->top();
a->push(2147483647);
a->push(-2147483648);
}
剑指offer 包含min函数的栈
最新推荐文章于 2024-08-29 16:57:08 发布
该博客介绍了一个C++实现的MinStack类,通过维护一个额外的数据结构,确保push、pop和获取最小值操作的时间复杂度为O(1)。在push时,如果新值小于当前最小值,则更新最小值并存储;在pop时,如果弹出的值是最小值,需要更新最小值。博客提供了详细的代码实现和测试用例。
摘要由CSDN通过智能技术生成