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

C++ में Next Greater Element II


मान लीजिए हमारे पास एक वृत्ताकार सरणी (circular array) है (सरणी का अंतिम तत्व का अगला तत्व सरणी का पहला तत्व है), हमें हर तत्व के लिए अगली बड़ी संख्या (Next Greater Number) प्रदर्शित करनी है। यहां एक संख्या x की अगली बड़ी संख्या सरणी में उसकी अनुक्रमण क्रम में अगली पहली बड़ी संख्या है, इसका मतलब है हम उसकी अगली बड़ी संख्या खोजने के लिए वृत्ताकार खोज कर सकते हैं। यदि यह मौजूद नहीं है, तो यह -1 होगा। इसलिए यदि संख्याएँ [1, 2, 1, 3, 2, 1] हैं, तो आउटपुट होगा: [2,3,3,-1,3,2]

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n := सरणी का आकार
  • res नामक एक सरणी परिभाषित करें, आकार n का, और इसे -1 से भरें, st नामक एक स्टैक परिभाषित करें
  • i को 0 से 2n तक की रेंज में
    • index := i mod n, x := nums[index]
    • जब तक st खाली नहीं है और nums[स्टैक के शीर्ष] < x
      • res[स्टैक के शीर्ष] := x
      • स्टैक से शीर्ष तत्व हटाएं
    • index को स्टैक में सम्मिलित करें
  • res लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution { public:    vector<int> nextGreaterElements(vector<int>& nums) {       int n = nums.size();       vector <int> res(n, - 1);       stack <int> st;       for(int i = 0; i < 2 * n; i++){          int idx = i % n;          int x = nums[idx];          while(!st.empty() && nums[st.top()] < x){             res[st.top()] = x;             st.pop();          }          st.push(idx);       }       return res;    } }; main(){    Solution ob;    vector<int> v = {1,2,1,3,2,1};    print_vector(ob.nextGreaterElements(v)); }

इनपुट

[1,2,1,3,2,1]

आउटपुट

[2,3,3,-1,3,2]

  1. - C++ में पिछला बड़ा एलिमेंट

    इस समस्या में, हमें एक ऐरे दिया गया है। हमारा कार्य ऐरे में वर्तमान एलिमेंट से पहले आने वाले सबसे बड़े एलिमेंट को लौटाना है अन्यथा -1 प्रिंट करना है।समस्या को समझने के लिए एक उदाहरण लेते हैंInput: {6, 2, 7, 1, 5, 3} Output: -1, 6, -1, 7, 7, 7इस समस्या को हल करने के लिए, एक आसान और स्पष्ट समाधान नेस्

  1. - C++ में मिन हीप में अधिकतम तत्व

    समस्या कथन एक मिनिमम हीप दिया गया है, उसमें अधिकतम तत्व ढूंढें। उदाहरण यदि इनपुट हीप है: तो अधिकतम तत्व 55 है। एल्गोरिदम मिनिमम हीप में पैरेंट नोड इसके चाइल्ड्रन से छोटा होगा। इसलिए हम निष्कर्ष निकाल सकते हैं कि एक नॉन-लीफ नोड अधिकतम नहीं हो सकता। लीफ नोड्स में अधिकतम तत्व खोजें। उदाहरण #incl

  1. - C++ प्रोग्राम: सरणी में प्रत्येक तत्व के लिए निकटतम बड़ा मान ज्ञात करना

    यहां हम देखेंगे कि सरणी में प्रत्येक तत्व के लिए निकटतम बड़ा मान कैसे ज्ञात करें। यदि किसी तत्व x का अगला तत्व जो उससे बड़ा है, और सरणी में भी मौजूद है, तो वह उस तत्व का बड़ा मान होगा। यदि तत्व मौजूद नहीं है, तो -1 लौटाएं। मान लें सरणी तत्व [10, 5, 11, 6, 20, 12] हैं, तो बड़े तत्व [11, 6, 12, 10, -1