设计包含min函数的栈。定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
在入栈的时候就用一个数组dp对当前栈内的元素最小值保存
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
class STACK {
private:
int size;
int cap;
int buf[100];
int dp[100];
int top;
public:
STACK():size(0),cap(1000), top(1) {
dp[0] = INT_MAX;
}
bool empty() {return top == 0;}
void push(const int a) {
buf[top] = a;
dp[top] = dp[top-1]>a? a:dp[top-1];
top++;
}
int pop() {
top--;
int temp = buf[top];
return temp;
}
int min()const {
return dp[top-1];
}
/*void prt() {
for(int i= 0; i< top;i++) {
cout<<dp[i]<<" ";
}
cout<<endl;
}*/
};
int main() {
STACK mystack;
int n, a;
cin>>n;
for(int i = 0; i<n; i++) {
cin >>a;
mystack.push(a);
}
cout<<"The min is "<<mystack.min()<<endl;
cout<<"Top is "<<mystack.pop()<<endl;
// mystack.prt();
system("pause");
}