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

C++ में आकार K के प्रत्येक सबऐरे में अधिकतम अद्वितीय एलिमेंट


इस समस्या में, हमें इंटीजर्स का एक ऐरे और एक इंटीजर K दिया गया है। हमारा कार्य एक ऐसा प्रोग्राम बनाना है जो बिना डुप्लिकेट के आकार K के प्रत्येक सबऐरे में अधिकतम अद्वितीय एलिमेंट ढूंढे।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट −

array = {4, 1, 1, 3, 3} k = 3

आउटपुट −

4 3 1

व्याख्या −

आकार 3 का सब-ऐरे सबऐरे {4, 1, 1}, अधिकतम = 4 सबऐरे {1, 1, 3}, अधिकतम = 3 सबऐरे {1, 3, 3}, अधिकतम = 1

इस समस्या को हल करने के लिए, एक सरल विधि दो लूप चलाना और सबऐरे बनाना और विशिष्ट एलिमेंट्स ढूंढना और उनमें से अधिकतम प्रिंट करना है।

लेकिन एक प्रभावी समाधान हैश टेबल और सेल्फ-बैलेंसिंग BST का उपयोग करके स्लाइडिंग विंडो विधि का उपयोग करना है ताकि अधिकतम एलिमेंट्स ढूंढे जा सकें।

तो, हम ऐरे को पार करेंगे और k लंबाई के सारांश के लिए हैश टेबल में एलिमेंट्स की गिनती संग्रहीत करेंगे और एलिमेंट्स को एक सेट में संग्रहीत करेंगे (जो केवल अद्वितीय एलिमेंट्स संग्रहीत करेगा)। और सेट का अधिकतम प्रिंट करें और ऐरे में प्रत्येक पुनरावृति के लिए ऐसा ही करें।

उदाहरण

हमारे समाधान के कार्य को स्पष्ट करने वाला प्रोग्राम,

#include <bits/stdc++.h> using namespace std; void maxUniqueSubArrayElement(int A[], int N, int K){    map<int, int> eleCount;    for (int i = 0; i < K - 1; i++)       eleCount[A[i]]++;    set<int> uniqueMax;    for (auto x : eleCount)       if (x.second == 1)          uniqueMax.insert(x.first);    for (int i = K - 1; i < N; i++) {       eleCount[A[i]]++;       if (eleCount[A[i]] == 1)           uniqueMax.insert(A[i]);       else          uniqueMax.erase(A[i]);       if (uniqueMax.size() == 0)          cout<<"-1\t" ;       else          cout<<*uniqueMax.rbegin()<<"\t";       int x = A[i - K + 1];       eleCount[x]--;       if (eleCount[x] == 1)          uniqueMax.insert(x);       if (eleCount[x] == 0)          uniqueMax.erase(x);    } } int main(){    int a[] = { 4, 3, 2, 2, 3, 5};    int n = sizeof(a) / sizeof(a[0]);    int k = 4;    cout<<"The maximum unique element for a subarray of size "<<k<<" is\n";       maxUniqueSubArrayElement(a, n, k);    return 0; }

आउटपुट

The maximum unique element for a subarray of size 4 is 4 -1 5

  1. - C++ में प्रीफिक्स सम का उपयोग करके O(n) में अधिकतम सबएरे सम

    समस्या कथनसकारात्मक और नकारात्मक पूर्णांकों का एक सरणी दिया गया है, उस सरणी में अधिकतम सबएरे सम ज्ञात करें।उदाहरणयदि इनपुट सरणी है {-12, -5, 4, -1, -7, 1, 8, -3} तो आउटपुट 9 होगा।एल्गोरिदमइनपुट सरणी का प्रीफिक्स सम निकालें।प्रारंभ करें: min_prefix_sum = 0, res = -infinitei = 0 से n तक लूप बनाए रखें

  1. - C++ में कम से कम X और अधिकतम Y आकार के सबएरे का अधिकतम औसत

    समस्या कथन एक ऐरे arr[] और दो पूर्णांक X और Y दिए गए हैं। कार्य कम से कम X और अधिकतम Y आकार के सब-एरे को ढूंढना है जिसका औसत अधिकतम हो। उदाहरण यदि इनपुट ऐरे है {2, 10, 15, 7, 8, 4} और x = 3 और Y = 3 तो हम अधिकतम औसत 12.5 निम्नानुसार प्राप्त कर सकते हैं: (10 + 15) / 2 = 12.5 एल्गोरिदम X से Y आकार

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

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