使用c++中的vector,效率很低。。。
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
~MinStack(){
}
void push(int x) {
a.push_back(x);
}
void pop() {
a.pop_back();
}
int top() {
if(a.empty()){
return NULL;
}
return a[a.size()-1];
}
int getMin() {
return *min_element(a.begin(),a.end());
}
private:
vector<int> a;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
执行用时 : 308 ms, 在Min Stack的C++提交中击败了5.04% 的用户
内存消耗 : 17.1 MB, 在Min Stack的C++提交中击败了12.14% 的用户
一开始限制vector的大小,当容量不够时进行扩容,但是并没什么用。
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
n=100;
a.reserve(n);
}
~MinStack(){
}
void push(int x) {
if(a.size()==a.capacity()){
n=n*2;
a.reserve(n);
}
a.push_back(x);
}
void pop() {
a.pop_back();
}
int top() {
if(a.empty()){
return NULL;
}
return a[a.size()-1];
}
int getMin() {
return *min_element(a.begin(),a.end());
}
private:
vector<int> a;
int n;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
执行用时 : 328 ms, 在Min Stack的C++提交中击败了5.04% 的用户
内存消耗 : 16.8 MB, 在Min Stack的C++提交中击败了81.38% 的用户
网上流行的使用辅助栈。。。。。。
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
s1.push(x);
if(minS.empty()||minS.top()>=x){
minS.push(x);
}
}
void pop() {
if(minS.top()==s1.top())
minS.pop();
s1.pop();
}
int top() {
return s1.top();
}
int getMin() {
return minS.top();
}
stack<int> s1,minS;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/