在O(1)中查找堆栈中的最大值,而无需在C ++中使用其他堆栈
假设我们要创建一个可以在堆栈中存储最大元素的堆栈。我们可以在O(1)时间内得到它。约束在于,它不应使用任何额外的空间,因此O(1)会占用额外的空间。
我们可以创建一个用户定义的堆栈,该堆栈将存储最大值,当执行一项操作(如pop或peek)时,将返回最大值。对于peek操作,返回top top的最大值和max元素;对于pop操作,当top元素较大时,返回它,然后打印并将max更新为2 * max – top_element。否则返回top_element。对于推送操作,将最大元素更新为x(要插入的数据),2 * x –最大。
示例
#include <iostream>#include <stack>
using namespace std;
class CustomStack {
stack<int> stk;
int stack_max;
public:
void getMax() {
if (stk.empty())
cout << "Stack is empty"<<endl;
else
cout << "Maximum Element in the stack is: "<< stack_max <<endl;
}
void peek() {
if (stk.empty()) {
cout << "Stack is empty ";
return;
}
int top = stk.top(); // Top element.
cout << "Top Most Element is: "<<endl;
(top > stack_max) ? cout << stack_max : cout << top;
}
void pop() {
if (stk.empty()) {
cout << "Stack is empty"<<endl;
return;
}
cout << "Top Most Element Removed: ";
int top = stk.top();
stk.pop();
if (top > stack_max) {
cout << stack_max <<endl;
stack_max = 2 * stack_max - top;
} else
cout << top <<endl;
}
void push(int element) {
if (stk.empty()) {
stack_max = element;
stk.push(element);
cout << "Element Inserted: " << element <<endl;
return;
}
if (element > stack_max) {
stk.push(2 * element - stack_max);
stack_max = element;
} else
stk.push(element);
cout << "Element Inserted: " << element <<endl;
}
};
int main() {
CustomStack stk;
stk.push(4);
stk.push(6);
stk.getMax();
stk.push(8);
stk.push(20);
stk.getMax();
stk.pop();
stk.getMax();
stk.pop();
stk.peek();
}
输出结果
Element Inserted: 4Element Inserted: 6
Maximum Element in the stack is: 6
Element Inserted: 8
Element Inserted: 20
Maximum Element in the stack is: 20
Top Most Element Removed: 20
Maximum Element in the stack is: 8
Top Most Element Removed: 8
Top Most Element is:
6
以上是 在O(1)中查找堆栈中的最大值,而无需在C ++中使用其他堆栈 的全部内容, 来源链接: utcz.com/z/322548.html