20、包含min函数的栈 过
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
1、一次解决 以前做过
class Solution {
public:
void push(int value) {
if(st.size()==0&&minSt.size()==0) {
st.push(value);
minSt.push(value);
}else{
st.push(value);
if(value<=minSt.top()){
minSt.push(value);
}
else{
minSt.push(minSt.top());
}
}
st.push(value);
}
void pop() {
st.pop();
minSt.pop();
}
int top() {
return st.top();
}
int min() {
return minSt.top();
}
stack<int> minSt;
stack<int> st;
};
二刷:
1、只一个栈来做,维持一个最小值,这种方法毫无疑问是更好一点的
运行时间:2ms 占用内存:504k
注意函数重名问题
class Solution {
int minNum = INT_MAX;
stack<int> st;
public:
void push(int value) {
minNum = std::min(value, minNum);//注意当前类中也有一个min函数,
//所以我们需要明确此时的min函数是哪个函数
st.push(minNum);
st.push(value);
}
void pop() {
st.pop();//pop掉当前值
st.pop();//pop掉当前最小值
int temp = st.top();
st.pop();
if(minNum == st.top()){
st.push(temp);
}else{
minNum = st.top();
st.pop();
st.push(minNum);
st.push(temp);
}
}
int top() {
return st.top();
}
int min() {
return minNum;
}
};
美女帅哥们如果觉得写的还行,有点用的话麻烦点个赞或者留个言支持一下阿秀~
如果觉得狗屁不通,直接留言开喷就完事了。