题目要求
题目思路
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);elses2.push(s2.top());}void pop() {s1.pop();s2.pop();}int top() {return s1.top();}int min() {return s2.top();}
};