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

सी++ में अगला ग्रेटर एलिमेंट II


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

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

  • n :=सरणी का आकार
  • एक सरणी को परिभाषित करें जिसे रेस कहा जाता है, आकार n का, और इसे -1 से भरें, एक स्टैक सेंट को परिभाषित करें
  • मैं के लिए 0 से 2n की सीमा में
    • सूचकांक:=i mod n, x:=nums[index]
    • जबकि सेंट खाली नहीं है और अंक [स्टैक के शीर्ष]
    • रेस [स्टैक के शीर्ष] :=x
    • स्टैक से शीर्ष तत्व हटाएं
  • ढेर में अनुक्रमणिका डालें
  • रिटर्न रेस
  • उदाहरण(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. सी ++ में पिछला बड़ा तत्व

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

    1. सी ++ में न्यूनतम ढेर में अधिकतम तत्व

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

    1. सी ++ में सरणी में प्रत्येक तत्व के लिए निकटतम अधिक मूल्य खोजें

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