O1的时间复杂度内实现栈的Push、Pop和min
程序员文章站
2022-06-03 13:38:28
...
思路:使用双栈,两个栈是同步关系。主栈是普通栈,用来实现栈的基本操作Push和Pop;辅助栈用来记录同步的最小值min,例如元素x进栈, 则辅助栈stack_ min[top++]=(x<min) ?x:min;即在每次Push中,都将当前最小元素放到stack_ min的栈顶。在主栈中Pop .最小元素y时,stack_ min 栈中相同位置的最小元素y也会随着top–而出栈。因此stack_ min的栈顶元素必然是y之前入栈的最小元素。本题是典型的以空间换时间的算法。
下面是c++实现的版本
#include<iostream>
using namespace std;
#define maxsize 100
int n;
//声明一个栈并且初始化
int stack[maxsize];
int top=-1;
//定义一个辅助栈
int stackMin[maxsize];
int minTop=-1;
//定义一个最小值
int minVal=1000;
void push(int x){
stack[++top]=x;
stackMin[++minTop]=x<minVal?x:minVal;
minVal=stackMin[minTop];
}
void pop(){
top--;
minTop--;
minVal=stackMin[minTop];
}
int getMin(){
return minVal;
}
int main(){
push(12);
push(9);
cout<<"压栈12 9之后的最小值"<<getMin()<<endl;
pop();
push(2132);
push(1);
push(2);
cout<<"压栈12 9,出栈,压栈2132,1,2之后的最小值"<<getMin()<<endl;
}
运行结果如下:
谢谢小可爱的鼓励与支持
上一篇: PHP 验证码显示破图 是怎么回事?
下一篇: 发现一个in_array很奇怪的有关问题
推荐阅读
-
java用两个栈实现队列的push和pop
-
C++实现用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
-
实现一个栈,要求pop,push,Min,时间复杂度为O(1)
-
算法————双栈实现队列、双队列实现栈、实现一个栈Push(出栈)Pop(入栈)Min(返回最小值的操作)的时间复杂度为O(1)
-
【每日一题】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
-
java用两个栈实现队列的push和pop
-
实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间 复杂度为O(1)
-
O1的时间复杂度内实现栈的Push、Pop和min
-
实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)
-
实现一个栈,push、pop、求栈中最小值min的时间复杂度为O(1)