題目類型
棧
題目描述
定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的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