Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

O(1) समय में एक स्टैक में अधिकतम खोजें और C++ में O(1) अतिरिक्त स्थान खोजें

मान लीजिए कि हम एक स्टैक बनाना चाहते हैं जो स्टैक में अधिकतम तत्व को स्टोर कर सके। और हम इसे O(1) समय में प्राप्त कर सकते हैं। बाधा यह है कि, इसे O(1) अतिरिक्त स्थान का उपयोग करना चाहिए।

हम एक उपयोगकर्ता-परिभाषित स्टैक बना सकते हैं, जो अधिकतम मूल्य को संग्रहीत करेगा, जब एक ऑपरेशन किया जाता है, जैसे पॉप या पीक, तो अधिकतम वापस कर दिया जाएगा। पीक ऑपरेशन के लिए, पॉप ऑपरेशन के लिए अधिकतम स्टैक टॉप और अधिकतम तत्व लौटाएं, जब शीर्ष तत्व बड़ा हो, तो इसे प्रिंट करें और अधिकतम 2 * अधिकतम - 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

  1. O(n) समय और O(1) अतिरिक्त स्थान में डुप्लिकेट खोजें - C++ में 1 सेट करें

    मान लीजिए हमारे पास 0 से n-1 तक की संख्याओं की एक सूची है। एक संख्या को जितनी बार संभव हो उतनी बार दोहराया जा सकता है। हमें बिना किसी अतिरिक्त स्थान के दोहराई जाने वाली संख्याएँ ज्ञात करनी हैं। यदि n =7, और सूची का मान [5, 2, 3, 5, 1, 6, 2, 3, 4, 5] जैसा है। उत्तर 5, 2, 3 होगा। इसे हल करने के लिए,

  1. सी ++ प्रोग्राम अधिकतम सबएरे योग ओ (एन ^ 2) समय (बेवकूफ विधि) खोजने के लिए

    हम अधिकतम सबअरे योग O(n^2) समय (बेवकूफ विधि) खोजने के लिए एक C++ प्रोग्राम विकसित करेंगे। एल्गोरिदम Begin    Take the array elements as input.    Make a loop for the length of the sub-array from 1 to n, within this loop,    Make another loop nested with the previous one

  1. पायथन में O(n) समय और O(1) अतिरिक्त स्थान में अधिकतम दोहराई जाने वाली संख्या ज्ञात करें

    मान लीजिए कि हमारे पास आकार n की एक सरणी है, यदि सरणी में तत्व 0 से k-1 तक हैं। जहाँ k को एक धनात्मक पूर्णांक और k <=n के रूप में निरूपित किया जाता है। हमें इस सरणी में अधिकतम दोहराई जाने वाली संख्या ज्ञात करनी है। इसलिए, यदि इनपुट k =8 और A =[3, 4, 4, 6, 4, 5, 2, 8] जैसा है, तो आउटपुट 4 होगा। इसे