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

C++ में समान सरणी में प्रत्येक तत्व का फ्लोर खोजना

समस्या विवरण

इस समस्या में, हमें पूर्णांक तत्वों की एक सरणी arr[] दी गई है। हमारा कार्य समान सरणी में प्रत्येक तत्व का फ्लोर खोजने के लिए एक प्रोग्राम बनाना है। यदि किसी तत्व का फ्लोर मौजूद है, तो हम फ्लोर प्रिंट करेंगे अन्यथा -1 प्रिंट करेंगे।

सरणी में किसी तत्व का फ्लोर वह निकटतम तत्व है जो सरणी में उस तत्व से छोटा या बराबर है।

उदाहरण

इनपुट: arr[] = {3, 1, 5, 7, 8, 2}
आउटपुट: 2 -1 3 5 7 1

व्याख्या: - 3 के लिए: फ्लोर 2 है (3 से छोटा सबसे बड़ा) - 1 के लिए: कोई छोटा तत्व नहीं, इसलिए -1 - 5 के लिए: फ्लोर 3 है - 7 के लिए: फ्लोर 5 है - 8 के लिए: फ्लोर 7 है - 2 के लिए: फ्लोर 1 है

हल का दृष्टिकोण

समस्या को हल करने का एक दृष्टिकोण नेस्टेड लूप का उपयोग करना है। एक सरणी के प्रत्येक तत्व के लिए लूप और आंतरिक वाला सरणी में तत्व के फ्लोर को खोजने के लिए।

समस्या को हल करने का एक अन्य दृष्टिकोण सॉर्ट की गई सरणी को संग्रहीत करने के लिए एक अतिरिक्त सरणी का उपयोग करना है। फिर मूल सरणी पर लूप करें और बाइनरी खोज एल्गोरिदम का उपयोग करके सॉर्ट की गई सरणी में तत्व का फ्लोर खोजें।

C++ कार्यान्वयन

#include <bits/stdc++.h> 
using namespace std; 

void printFloorEle(int arr[], int n) {
    vector<int> sortedArr(arr, arr + n);
    sort(sortedArr.begin(), sortedArr.end());
    
    for (int i = 0; i < n; i++) {
        // निचली_सीमा खोजें: पहला तत्व ≥ arr[i]
        auto it = lower_bound(sortedArr.begin(), sortedArr.end(), arr[i]);
        
        if (it == sortedArr.begin()) {
            // सबसे छोटा तत्व
            if (arr[i] == sortedArr[1])  // डुप्लिकेट हैंडलिंग
                cout << arr[i];
            else
                cout << -1;
        } else if (it != sortedArr.end() && *it == arr[i] && next(it) != sortedArr.end() && *next(it) == arr[i]) {
            // डुप्लिकेट केस: फ्लोर स्वयं है
            cout << arr[i];
        } else {
            // फ्लोर पिछला तत्व है
            cout << *(it - 1);
        }
        cout << "\t";
    }
}

int main() {
    int arr[] = {3, 1, 5, 7, 8, 2};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "दी गई सरणी के प्रत्येक तत्व का फ्लोर है: ";
    printFloorEle(arr, n);
    return 0;
}

आउटपुट

दी गई सरणी के प्रत्येक तत्व का फ्लोर है: 2  -1  3  5  7  1

जटिलता विश्लेषण

  • समय जटिलता: O(N log N) - सॉर्टिंग + N बाइनरी खोज
  • स्पेस जटिलता: O(N) - सॉर्ट की गई कॉपी के लिए

नोट

कोड डुप्लिकेट को सही ढंग से संभालता है: यदि मान कई बार आता है, तो इसका फ्लोर स्वयं होता है।

  1. - C++ STL में array::get() फंक्शन

    std::array के लिए get() फंक्शन इस खंड में हम C++ STL में सरणी के get() फंक्शन को देखेंगे। यह फंक्शन सरणी कंटेनर के i-वें तत्व को प्राप्त करने के लिए उपयोग किया जाता है। सिंटैक्स इस प्रकार है: सिंटैक्स get<I>(array_name) यह फंक्शन दो अनिवार्य पैरामीटर लेता है। पहला इंडेक्स पैरामीटर है (टेम्प

  1. - C++ STL में सरणी का कार्यान्वयन

    सरणी पर विभिन्न ऑपरेशन्स और स्यूडोकोड्स: Begin In main(),    While TRUE do       Prints some choices.       Take input of choice.       Start the switch case          When case is 1           &n

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

    एक सरणी में कई एलिमेंट्स होते हैं और सरणी में सबसे बड़ा एलिमेंट वह होता है जो अन्य एलिमेंट्स से बड़ा होता है। उदाहरण के लिए। 5 1 7 2 4 उपरोक्त सरणी में, 7 सबसे बड़ा एलिमेंट है और यह इंडेक्स 2 पर है। सरणी का सबसे बड़ा एलिमेंट खोजने का एक प्रोग्राम निम्नलिखित है। उदाहरण #include <iostream>