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

C++ में अतिरिक्त स्टैक के बिना O(1) में स्टैक में अधिकतम तत्व ज्ञात करें


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

हम एक यूजर-डिफाइंड स्टैक बना सकते हैं, जो अधिकतम मान को स्टोर करेगा, जब एक ऑपरेशन किया जाता है, जैसे पॉप या पीक, तो अधिकतम वापस किया जाएगा। पीक ऑपरेशन के लिए, स्टैक टॉप और अधिकतम तत्व का अधिकतम वापस करें, पॉप ऑपरेशन के लिए, जब टॉप तत्व बड़ा हो, तो इसे प्रिंट करें और अधिकतम को 2*अधिकतम - टॉप_एलिमेंट के रूप में अपडेट करें। अन्यथा टॉप_एलिमेंट वापस करें। पुश ऑपरेशन के लिए अधिकतम तत्व को 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. - C++ में ceil() फ़ंक्शन के बिना a/b का सीलिंग मान ज्ञात करें

    यहां हम देखेंगे कि ceil() फ़ंक्शन का उपयोग किए बिना a/b का सीलिंग मान कैसे प्राप्त किया जाता है। यदि a = 5, b = 4, तो (a/b) = 5/4। ceiling(5/4) = 2। इसे हल करने के लिए, हम इस सरल सूत्र का पालन कर सकते हैं: $$ceil(a,b)=\frac{a+b-1}{b}$$ उदाहरण #include <iostream> using namespace std; int ce

  1. - बाइनरी सर्च का उपयोग करके सरणी में अधिकतम एलिमेंट खोजने के लिए C++ प्रोग्राम

    यह बाइनरी सर्च ट्री का उपयोग करके सरणी के अधिकतम एलिमेंट को खोजने के लिए एक C++ प्रोग्राम है। इस प्रोग्राम की समय जटिलता O(log n) है। एल्गोरिदम शुरुआत दिए गए डेटा एलिमेंट्स का उपयोग करके बाइनरी सर्च ट्री बनाएं। अगला रूट पॉइंटर को दाएं सबसे चाइल्ड नोड पर ट्रैवर्स करें। नोड के डेटा भाग को दिए गए डेटा

  1. - लिनियर सर्च का उपयोग करके सरणी में न्यूनतम एलिमेंट खोजने के लिए C++ प्रोग्राम

    यह लिनियर सर्च दृष्टिकोण का उपयोग करके सरणी के न्यूनतम एलिमेंट को खोजने के लिए एक C++ प्रोग्राम है। इस प्रोग्राम की समय जटिलता O(n) है। एल्गोरिदम शुरुआत डेटा एलिमेंट को सरणी में निर्दिष्ट करें। 0 इंडेक्स पर मान को न्यूनतम वेरिएबल में निर्दिष्ट करें। न्यूनतम की तुलना अन्य डेटा एलिमेंट्स से क्रमिक रूप