1.题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。在该栈中,调用min,push,pop,的时间复杂度都是O(1)
2.设计思想一
应用一个辅助栈,压的时候,如果待压入元素比B栈栈顶大,A压B不压,小于等于,AB栈同时压入,出栈,如果,AB栈顶元素不等,A出,B不出。
class Solution {
public:
stack<int> stack1,stack2;
void push(int value) {
stack1.push(value);
if(stack2.empty())
stack2.push(value);
else if(value<=stack2.top())
{
stack2.push(value);
}
}
void pop() {
if(stack1.top()==stack2.top())
stack2.pop();
stack1.pop();
}
int top() {
return stack1.top();
}
int min() {
return stack2.top();
}
};
设计思想2
压栈时候,A必压,B也压,B压包括待压元素在内的最小元素(也就是B压B栈顶和新元素的较小者);出栈时候,AB二者都是,不空就出栈顶(B栈顶必是最小元素)
#include <assert.h>
class Solution {
public:
// stack<int> STACK;
// stack<int> Min_STACK;
//void push(int value) {
// STACK.push(value);
// if(Min_STACK.size()==0||(Min_STACK.size()!=0&&Min_STACK.top()>value))
// Min_STACK.push(value);
// else
// Min_STACK.push(Min_STACK.top());
// }
// void pop() {
// assert(STACK.size()>0&&Min_STACK.size()>0);
// STACK.pop();
// Min_STACK.pop();
// }
// int top() {
// assert(STACK.size()>0);
// return STACK.top();
// }
// int min() {
// assert(STACK.size()>0&&Min_STACK.size()>0);
// return Min_STACK.top();
// }
注意:若实际题目没给出我们需要的头文件,在最顶上自己包含需要的头文件即可