题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
思路:
https://www.bilibili.com/video/BV13p4y167KL/?spm_id_from=333.788&vd_source=cc3333a27046bad449a2b6818cc4149c
思路:
push操作中,st1中直接压入,st2中如果为空,直接压入,如果不为空,
和st2的栈顶元素进行比较,如果小于等于栈顶元素,则入栈,如果大于,将原st2的栈顶再次入栈
class Solution {
public:stack<int> st1;stack<int> st2;Solution() {}void push(int x) {st1.push(x);if (!st2.empty()) {if (x <= st2.top()) {st2.push(x);}else {st2.push(st2.top());}}else {st2.push(x);}}int top() {return st1.top();}void pop() {st1.pop();st2.pop();}int minvalue() {return st2.top();}
};int main() {Solution ss;ss.push(-2);ss.push(0);ss.push(-3);cout<<ss.minvalue()<<endl;ss.pop();cout<<ss.top()<<endl;cout<<ss.minvalue()<<endl;return 0;
}