题目类型
栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
code
- code0
- 一个栈+一个同步容器
- 这里要注意vector的erase操作
class Solution {
public:
stack<int> st;
vector<int> v;
void push(int value) {
st.push(value);
v.push_back(value);
}
void pop() {
vector<int>::iterator it;
for(it=v.begin(); it!=v.end(); it++){
if(*it==st.top()){
v.erase(it);
break;
}
}
st.pop();
}
int top() {
return st.top();
}
int min() {
int minn=0x3f3f3f;
for(int i=0; i<v.size(); i++){
if(minn>v[i])
minn=v[i];
}
return minn;
}
};
运行时间:3ms
占用内存:480k
- code1
- 一个栈+一个同步栈
- 这个比较巧妙:设置一个同步栈用于保存最小值,当push的元素value
小于等于
该同步栈顶元素时,将value推入该同步栈;当pop操作时栈顶元素与同步栈顶元素相等时,将同步栈定元素也pop出去这样可以保持。(该同步栈顶元素一定是最小值)
class Solution {
public:
stack<int> st;
stack<int> smin;
void push(int value) {
st.push(value);
if(smin.empty())
smin.push(value);
else if(smin.top()>=value){
smin.push(value);
}
}
void pop() {
if(st.top()==smin.top())
smin.pop();
st.pop();
}
int top() {
return st.top();
}
int min() {
return smin.top();
}
};
运行时间:3ms
占用内存:484k