题目要求
题目思路
1.设计上两个栈,第一个栈s1里面正常存储插入进来的数据,s2里面只存储s1里面最小的那个数据。
2.对于push函数,所有新来的value都需要在s1中插入,s2中,如果s2为空,那么也直接插入,因为这个值就是最小值,如果s2已经有元素,那么拿s1中最小的同新的value比较,如果value小则在s2中也插入一个value,如果原本s1中的最小值小,那么就把s2.top()在插入一份,这个的原因是为了方便实现pop(),如果s1中需要删除,那么s2也直接删除就,因为s1和s2中的元素个数一样多,这样当s1把最小值删除的时候,s2会也删除掉。
3.pop函数,s1和s2正常删除
4.min函数的返回值等于s1的底部,等于s2的top(),因为s1的底部不好取,所以才创建的s2用于记录。
代码实现
class Solution {
public:
stack<int> s1;
stack<int> s2;
void push(int value) {
s1.push(value);
if(s2.empty() || s2.top() > value)
s2.push(value);
else
s2.push(s2.top());
}
void pop() {
s1.pop();
s2.pop();
}
int top() {
return s1.top();
}
int min() {
return s2.top();
}
};