看题目想着既然要我 创建栈,那我就用数组写一个。经过演算发现。 我的代码的问题是。只取小的那一个,如果在push次数和pop次数相同的情况下。最小值取不到了。因为最小值数组里面每次只会存小于当前最小值的下表。自然是错的
错误代码:
#define N 30000
class MinStack {
public:
int minmal= 1<31;
int ptop=0;
int tail=0;
int s[N];
int h[N]={0};
int h_tail=0;
MinStack() {
s[1]=0;
}
void push(int val) {
s[tail++]=val;
if(val<=this->minmal){
this->minmal=val;
hadd(tail);
}
}
void pop() {
tail--;
}
int top() {
return s[--tail];
}
int getMin() {
if(h[h_tail]<=tail){
return s[h[h_tail-1]];
}else{
for(int i=h_tail;i>=0;i--){
if(h[i]<=tail){
break;
}
}
return s[h[h_tail-1]];
}
}
void hadd(int tail){
h[h_tail++]=tail-1;
}
};
结果,好家伙。答案直接用栈。我看题目还以为是要自己写一个栈呢。我靠。
正确答案是:
目录
class MinStack {
public:
stack<int> val_stk;
stack<int> min_stk;
MinStack() {
min_stk.push(INT_MAX);
}
void push(int val) {
val_stk.push(val);
min_stk.push(min(min_stk.top(),val));
}
void pop() {
val_stk.pop();
min_stk.pop();
}
int top() {
return val_stk.top();
}
int getMin() {
return min_stk.top();
}
};