इस समस्या में, हमें आकार n का एक सरणी arr[], आकार m का सरणी del[] और एक पूर्णांक k दिया जाता है। हमारा काम है दिए गए तत्वों को हटाने के बाद k सबसे बड़ी संख्या खोजना ।
हमें डेल [] सरणी में मौजूद सभी तत्वों को हटाने के बाद मिले सरणी [] से पहले k सबसे बड़े तत्वों को प्रिंट करने की आवश्यकता है। यदि सरणी में दो उदाहरण मौजूद हैं तो पहले उदाहरण को हटा दें।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : arr[] = {3, 5, 1, 7, 9, 2}, del[] = {1, 9, 3}, k = 2 Output : 7, 5
स्पष्टीकरण -
Array arr[] after deleting the elements : {5, 7, 2} 2 maximum elements are 7, 5.
समाधान दृष्टिकोण
समस्या का एक सरल समाधान एआर [] से सभी तत्वों को हटाकर है जो डेल [] में मौजूद हैं। फिर सरणी को अवरोही क्रम में क्रमबद्ध करें और सरणी के पहले k तत्वों को प्रिंट करें।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <bits/stdc++.h> using namespace std; void findKmaxElementDelArray(int arr[], int n, int del[], int m, int k){ for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(arr[j] == del[i]){ arr[j] = INT_MIN; break; } } } sort(arr, arr + n, greater<int>()); for (int i = 0; i < k; ++i) { cout<<arr[i]<<" "; } } int main(){ int array[] = { 3, 5, 1, 7, 9, 2 }; int m = sizeof(array) / sizeof(array[0]); int del[] = { 1, 9, 3 }; int n = sizeof(del) / sizeof(del[0]); int k = 2; cout<<k<<" largest numbers after deleting the elements are "; findKmaxElementDelArray(array, m, del, n, k); return 0; }
आउटपुट
2 largest numbers after deleting the elements are 7 5
एक और तरीका
समस्या को हल करने का एक और तरीका हैशपैप और हीप का उपयोग करना है। हम एक मैक्स-हीप और हैश मैप बनाएंगे। हैशमैप में सरणी डेल [] के सभी तत्व शामिल होंगे। और फिर सरणी के तत्वों को सम्मिलित करें [] जो हैश-मैप में अधिकतम-ढेर में मौजूद नहीं हैं। ढेर से k तत्वों को पॉप करें और फिर इसे प्रिंट करें।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <bits/stdc++.h> using namespace std; void findKmaxElementDelArray(int arr[], int n, int del[], int m, int k){ unordered_map<int, int> deleteElement; for (int i = 0; i < m; ++i) { deleteElement[del[i]]++; } priority_queue<int> maxHeap; for (int i = 0; i < n; ++i) { if (deleteElement.find(arr[i]) != deleteElement.end()) { deleteElement[arr[i]]--; if (deleteElement[arr[i]] == 0) deleteElement.erase(arr[i]); } else maxHeap.push(arr[i]); } for (int i = 0; i < k; ++i) { cout<<maxHeap.top()<<" "; maxHeap.pop(); } } int main(){ int array[] = { 3, 5, 1, 7, 9, 2 }; int m = sizeof(array) / sizeof(array[0]); int del[] = { 1, 9, 3 }; int n = sizeof(del) / sizeof(del[0]); int k = 2; cout<<k<<" largest numbers after deleting the elements are "; findKmaxElementDelArray(array, m, del, n, k); return 0; }
आउटपुट
2 largest numbers after deleting the elements are 7 5