在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: 4

Element 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

回到顶部