इस समस्या में, हमें आकार n की एक सरणी arr[], आकार m की सरणी del[], और एक पूर्णांक k दिया गया है। हमारा कार्य दिए गए तत्वों को हटाने के बाद k सबसे छोटी संख्याएं ज्ञात करना है।
हमें सरणी arr[] से पहले k सबसे छोटे तत्व प्रिंट करने हैं जो del[] सरणी में मौजूद सभी तत्वों को हटाने के बाद पाए जाते हैं। यदि सरणी में दो उदाहरण मौजूद हैं तो पहले उदाहरण को हटाएं।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट : arr[] = {3, 5, 1, 7, 9, 2}, del[] = {1, 9, 3}, k = 2 आउटपुट : 2, 5 व्याख्या −
तत्वों को हटाने के बाद सरणी arr[] : {5, 7, 2} 2 न्यूनतम तत्व 2, 5 हैं। समाधान दृष्टिकोण
समस्या का एक सरल समाधान arr[] से उन सभी तत्वों को हटाना है जो del[] में मौजूद हैं। फिर सरणी को आरोही क्रम में सॉर्ट करें और सरणी के पहले k तत्वों को प्रिंट करें।
उदाहरण
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
#include <bits/stdc++.h> using namespace std; void findKminElementDelArray(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_MAX; break; } } } sort(arr, arr + n); 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<<" तत्वों को हटाने के बाद सबसे छोटी संख्याएं हैं "; findKminElementDelArray(array, m, del, n, k); return 0; } आउटपुट
2 तत्वों को हटाने के बाद सबसे छोटी संख्याएं हैं 2 5
एक अन्य दृष्टिकोण
समस्या को हल करने का एक अन्य दृष्टिकोण हैशमैप और हीप का उपयोग करना है। हम एक मिन-हीप और एक हैश मैप बनाएंगे। हैशमैप में सरणी del[] के सभी तत्व होंगे। और फिर सरणी arr[] के उन तत्वों को डालें जो हैश-मैप में मौजूद नहीं हैं, मिन-हीप में। हीप से k तत्व पॉप करें और फिर प्रिंट करें।
उदाहरण
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
#include <bits/stdc++.h> using namespace std; void findKminElementDelArray(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, vector<int>, greater<int> > minHeap; 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 minHeap.push(arr[i]); } for (int i = 0; i < k; ++i) { cout<<minHeap.top()<<" "; minHeap.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<<" तत्वों को हटाने के बाद सबसे छोटी संख्याएं हैं "; findKminElementDelArray(array, m, del, n, k); return 0; } आउटपुट
2 तत्वों को हटाने के बाद सबसे छोटी संख्याएं हैं 2 5