思路1:使用vector模拟栈,寻找min的时候遍历一遍即可
思路2:使用两个栈,一个正常存储,一个栈用来把最小元素(存在栈中的)维持到栈顶;当value小于stack2栈顶时,则进行入栈更新栈顶最小元素,否则将原来的stack2栈顶元素再次入栈以保持两个栈的大小一致(为了出栈时能够让stack1与stack2中的最小元素在同一层),并且保持栈顶为最小值
class Solution {
public:
vector<int> myvector;
void push(int value)
{
myvector.push_back(value);
return;
}
void pop()
{
if(!myvector.empty())
{
myvector.pop_back();
}
return;
}
int top()
{
if(!myvector.empty())
{
int item=myvector.back();
return item;
}
return -10001;
}
int min()
{
int min=10001;
int size=myvector.size();
for(int i=0;i<size;i++)
{
if(myvector[i]<min)
min=myvector[i];
}
return min;
}
};
class Solution {
public:
stack<int> mystack1;
stack<int> mystack2;
void push(int value)
{
mystack1.push(value);
if(mystack2.empty())
mystack2.push(value);
else
{
int top=mystack2.top();
if(value<top)
mystack2.push(value);
else
mystack2.push(top);//保持栈顶为最小元素
}
}
void pop()
{
if(!mystack1.empty()&&!mystack2.empty())
{
mystack1.pop();
mystack2.pop();
}
}
int top()
{
if(!mystack1.empty()&&!mystack2.empty())
{
return mystack1.top();
}
return -1;
}
int min()
{
return mystack2.top();
}
};