欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

运行结果如下:

O1的时间复杂度内实现栈的Push、Pop和min
谢谢小可爱的鼓励与支持

相关标签: 考研之数据结构