题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路
按照题目给出的接口,我是自己定义了结构体写了栈的,但是标准解法里却用的是stack stl库,这里先贴出我的代码,会发生段错误,目前原因未知:
class Solution {
public:
struct stack1{
int value = 0;
stack1 *next = NULL;
int mininal = (1<<30);
};
stack1 *start = NULL;
int mininal=(1<<30);
void push(int value) {
stack1 tmp;
tmp.mininal = mininal;
tmp.value = value;
tmp.next = start;
start = &tmp;
mininal = value<mininal?value:mininal;
}
void pop() {
//if(start->value == mininal)
//mininal = start->mininal;
start = start->next;
}
int top() {
return start->value;
}
int min() {
return mininal;
//return start->value<start->mininal?start->value:start->mininal;
}
};
标准解法是使用一个辅助栈,因为可以使用STL,思路很简单,代码如下:
class Solution {
public:
void push(int value) {
Q1.push(value);
if(Q2.empty()) Q2.push(value);
else
Q2.push(value<Q2.top()?value:Q2.top());
}
void pop() {
Q1.pop();
Q2.pop();
}
int top() {
return Q1.top();
}
int min() {
return Q2.top();
}
private:
stack<int> Q1;
stack<int> Q2;
};