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

C++ का उपयोग करते हुए उन उप-सरणियों की संख्या ज्ञात कीजिए जिनका न्यूनतम और अधिकतम समान है

इस लेख में, हम सी ++ का उपयोग करके उन सबएरे की संख्या खोजने की समस्या को हल करेंगे जिनके अधिकतम और न्यूनतम तत्व समान हैं। यहाँ समस्या का उदाहरण दिया गया है -

Input : array = { 2, 3, 6, 6, 2, 4, 4, 4 }
Output : 12
Explanation : {2}, {3}, {6}, {6}, {2}, {4}, {4}, {4}, {6,6}, {4,4}, {4,4} and { 4,4,4 } are the subarrays which can be formed with maximum and minimum element same.

Input : array = { 3,3,1,5,1,2,2 }
Output : 9
Explanation : {3}, {3}, {1}, {5}, {1}, {2}, {2}, {3,3} and {2,2} are the subarrays which can be formed with minimum and maximum are the same.

समाधान खोजने के लिए दृष्टिकोण

उदाहरणों को देखते हुए, हम कह सकते हैं कि सरणी के आकार के बराबर न्यूनतम और अधिकतम तत्वों के साथ न्यूनतम संख्या में उपसरणियां बनाई जा सकती हैं। यदि समान क्रमागत संख्याएँ हों तो उपसरणियों की संख्या अधिक हो सकती है।

इसलिए हम प्रत्येक तत्व के माध्यम से जाने का एक दृष्टिकोण लागू कर सकते हैं और जांच सकते हैं कि इसकी लगातार संख्याएं समान हैं या नहीं और लगातार संख्याएं समान होने पर वृद्धि की गणना करें, और यदि कोई अलग संख्या मिलती है तो आंतरिक लूप तोड़ दें।

परिणाम चर हर बार आंतरिक लूप के समाप्त होने या टूटने पर परिणाम चर को बढ़ाता है और अंत में परिणाम चर से परिणाम दिखाता है।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a[ ] = { 2, 4, 5, 3, 3, 3 };
    int n = sizeof(a) / sizeof(a[0]);
        int result = n, count =0;
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            if(a[i]==a[j])
                count++;
            else
                break;
        }
        result+=count;
        count =0;
    }
    cout << "Number of subarrays having minimum and maximum elements same:" << result;
    return 0;
}

आउटपुट

Number of subarrays having minimum and maximum elements same: 9
Time complexity = O(n2).

उपरोक्त कोड की व्याख्या

इस कोड में, हम एरे के आकार को स्टोर करने के लिए वेरिएबल n ले रहे हैं, परिणाम =n, क्योंकि न्यूनतम n सबएरे बनाए जा सकते हैं और समान संख्याओं की गिनती रखने के लिए गिना जा सकता है।

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

कुशल तरीका

इस दृष्टिकोण में, हम प्रत्येक तत्व के माध्यम से जा रहे हैं, और प्रत्येक तत्व के लिए, हम खोज रहे हैं कि कितनी लगातार समान संख्याएं हैं। प्रत्येक समान संख्या के लिए, हम गणना चर को बढ़ा रहे हैं, और जब अलग-अलग संख्याएँ पाई जाती हैं, तो गिनती की सहायता से, हम यह पता लगा रहे हैं कि "n =n*(n+1) सूत्र का उपयोग करके कितने उप-सरणी बनाए जा सकते हैं। /2" और इस सूत्र के उत्तर के साथ परिणाम चर को बढ़ाना।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a[] = { 2, 4, 5, 3, 3, 3 };
    int n = sizeof(a) / sizeof(a[0]);
        int result = 0;
    int count =1,temp=a[0];
    for (int i = 1; i < n; i++) {
        if (temp==a[i]){
            count++;
        }
        else{
            temp=a[i];
            result = result + (count*(count+1)/2);
            count=1;
        }
    }
    result = result + (count*(count+1)/2);
    cout <<  "Number of subarrays having minimum and maximum elements same:" << result;
    return 0;
}

आउटपुट

Number of subarrays having minimum and maximum elements same: 9
Time complexity : O(n)

उपरोक्त कोड की व्याख्या

इस कोड में, हम अस्थायी चर में सरणी के 0 वें सूचकांक को संग्रहीत करते हैं और सूचकांक 1 के साथ लूप शुरू करते हैं। हम जांचते हैं कि क्या अस्थायी चर वर्तमान सूचकांक में तत्व के बराबर है और समान संख्या के लिए 1 से वृद्धि हुई है। यदि अस्थायी चर सूचकांक तत्व के बराबर नहीं है, तो हम उपसरणियों के संयोजन पाते हैं जो समान संख्याओं की गणना से बनाए जा सकते हैं और परिणाम को परिणाम चर में संग्रहीत कर सकते हैं। हम अस्थायी मान को वर्तमान इंडेक्स रीसेटिंग काउंट में 1 में बदलते हैं। अंत में, हम परिणाम चर में संग्रहीत उत्तर दिखा रहे हैं।

निष्कर्ष

इस लेख में, हम उन उपसरणियों की संख्या ज्ञात करने के लिए एक समस्या का समाधान करते हैं जिनके न्यूनतम और अधिकतम तत्व समान हैं। हमने इस समस्या के लिए C++ प्रोग्राम और संपूर्ण दृष्टिकोण (सामान्य और कुशल) भी सीखा जिसके द्वारा हमने इस समस्या को हल किया। हम उसी प्रोग्राम को अन्य भाषाओं जैसे सी, जावा, पायथन और अन्य भाषाओं में लिख सकते हैं। आशा है कि आपको यह लेख मददगार लगा होगा।


  1. C++ का उपयोग करके पंचकोणीय पिरामिड संख्या ज्ञात कीजिए

    एक पंचकोणीय पिरामिड संख्या एक पंचकोणीय आधार पिरामिड में मदों की संख्या के बराबर होती है। नीचे कुछ पंचकोणीय संख्याओं को देखें। N तक पंचकोणीय संख्याओं का योग Nवीं पंचकोणीय पिरामिड संख्या के बराबर होता है। इस लेख में, हम उदाहरण के लिए, Nth पंचकोणीय पिरामिड संख्या खोजने पर चर्चा करेंगे Input : N = 4

  1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

    इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu

  1. C++ . का उपयोग करके एक फ़ुटबॉल पर पेंटागन और हेक्सागोन्स की संख्या ज्ञात करें

    जैसा कि हम सभी जानते हैं, पेंटागन और षट्भुज फुटबॉल के समान रूप से आवश्यक अंग हैं। ये आकार एक पूर्ण गोलाकार आकृति बनाने के लिए एक पहेली की तरह एक साथ फिट होते हैं। तो यहाँ हमारे पास एक फ़ुटबॉल है, जिसमें हमें षट्भुज और पेंटागन खोजने हैं। हम समस्या को आसानी से हल करने के लिए यूलर विशेषता का उपयोग क