思路1:
选用存放数据的栈s和存放当前最小值的辅助栈mins,当s内存入比当前最小值还小的树,则该数字入辅助栈,若存放值比当前最小值大,则再次存入当前最小值到辅助栈;这样mins存在冗余信息,可进一步改进。
代码1:
class Solution {
public:
stack<int> s, mins;
void push(int value) {
s.push(value);
if(mins.empty()) {
mins.push(value);
} else {
int mn = mins.top();
value <= mn ? mins.push(value) : mins.push(mn);
}
}
void pop() {
s.pop();
mins.pop();
}
int top() {
return s.top();
}
int min() {
return mins.top();
}
};
思路2:
在mins辅助栈中,去除信息的冗余性,如果入栈值比当前栈内最小值要大,则mins辅助栈不做任何操作。但在s出栈时,则需要判断栈顶元素与mins栈顶元素是否相等,若相等则mins.pop()。
代码2:
class Solution {
public:
stack<int> s, mins;
int tmp = INT_MAX;
void push(int value) {
s.push(value);
if(mins.empty()) {
tmp = value;
mins.push(value);
} else {
if(value <= tmp) {
tmp = value;
mins.push(value);
}
}
}
void pop() {
if(s.top() == mins.top()) {
mins.pop();
}
s.pop();
}
int top() {
return s.top();
}
int min() {
return mins.top();
}
};