题目链接
题目一看,easy!不就定义一个变量,记录最小值输出吗。那pop之后呢?有小丑……
这道题是看了题解写的,先留着,等过几天再来回忆可能会好些吧。
class MinStack { public: stack未曾想过的方法:assistStack; stack myStack; MinStack() { } void push(int x) { myStack.push(x); if(assistStack.empty()||x<=assistStack.top()){ assistStack.push(x); } } void pop() { int mid = myStack.top(); myStack.pop(); if(mid==assistStack.top()){ assistStack.pop(); } } int top() { return myStack.top(); } int min() { return assistStack.top(); } };
class MinStack { public: stackst; int Min = INT_MAX; MinStack() { } void push(int x) { st.push(Min); if (x < Min) Min = x; st.push(x); } void pop() { st.pop(); Min = st.top(); st.pop(); } int top() { return st.top(); } int min() { return Min; } };
每次push()都为先向栈垫一个数据——添加前栈中的最小值,这样,每次pop()后都可以获取该数据即得到当前栈中最小值。
例如依次执行以下 *** 作:(其中高亮的就是添加前栈中最小值)
push(3)
栈由底到顶:INT_MAX 3
push(2)
栈由底到顶:INT_MAX 3 3 2
push(7)
栈由底到顶:INT_MAX 3 3 2 2 7push(4)
栈由底到顶:INT_MAX 3 3 2 2 7 2 4pop()
栈由底到顶:INT_MAX 3 3 2 2 7push(4)
栈由底到顶:INT_MAX 3 3 2 2 7 2 4pop()
栈由底到顶:INT_MAX 3 3 2 2 7
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)