class MaxStack {
public:
//双栈,一个栈记录数,另一个栈记录到目前为止的最大值(每增删一次都要)。
//再进行操作时要将两栈同步。
stack<int> sck_num;
stack<int> sck_max;
MaxStack() {
}
void push(int x) {
if(sck_max.empty()||x>sck_max.top())
sck_max.push(x);
else sck_max.push(sck_max.top());
sck_num.push(x);
}
int pop() {
sck_max.pop();
int num=sck_num.top();
sck_num.pop();
return num;
}
int top() {
return sck_num.top();
}
int peekMax() {
return sck_max.top();
}
int popMax() {
stack<int> temp;
int rec=sck_max.top();
while(sck_max.top()!=rec)
{
int dele=sck_num.top();
sck_max.pop();
sck_num.pop();
temp.push(dele);
}
sck_max.pop();
sck_num.pop();
while(!temp.empty()){
int add=temp.top();
temp.pop();
this->push(add);
}
return rec;
}
};
/**
* Your MaxStack object will be instantiated and called as such:
* MaxStack* obj = new MaxStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->peekMax();
* int param_5 = obj->popMax();
*/
leetcode 716最大栈
最新推荐文章于 2024-08-06 16:01:52 发布
这个博客介绍了一个使用两个栈的数据结构`MaxStack`,其中一个栈存储元素,另一个栈记录当前的最大值。在执行push、pop、top操作时,`MaxStack`能保持同步更新最大值,同时提供peekMax和popMax方法,分别用于查看和删除当前的最大值。这个设计在需要高效获取和删除最大值的场景下非常有用。
摘要由CSDN通过智能技术生成