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

C++ में दिए गए तत्वों को हटाने के बाद k सबसे छोटी संख्याएं ज्ञात करें


इस समस्या में, हमें आकार 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

  1. - C++ में दिए गए अंतर वाली जोड़ी ढूंढें

    समस्या विवरण एक सरणी A दी गई है जिसमें n विभिन्न तत्व हैं। हमें सरणी से एक जोड़ी (x, y) ढूंढनी है जिससे x और y का अंतर दिए गए अंतर d के बराबर हो। उदाहरण के लिए, यदि सरणी A = [10, 15, 26, 30, 40, 70] है और दिया गया अंतर 30 है, तो जोड़ियां (10, 40) और (30, 70) होंगी। हल दृष्टिकोण इस समस्या को हल करन

  1. - C++ में दिए गए सूचकांकों के साथ N फाइबोनैचि संख्याओं का GCD ढूंढना

    यहां हमें दिए गए सूचकांकों के साथ n फाइबोनैचि पदों का GCD ढूंढना है। तो सबसे पहले हमें अधिकतम सूचकांक प्राप्त करना होगा, और फाइबोनैचि पद उत्पन्न करने होंगे। कुछ फाइबोनैचि पद ऐसे हैं: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... सूचकांक 0 से शुरू होता है। तो 0वें सूचकांक पर तत्व 0 है। यदि हमें सूचकांकों {2,

  1. - C++ में दिए गए सरणी के एलिमेंट्स के फैक्टोरियल का GCD खोजें

    मान लीजिए हमारे पास N एलिमेंट्स वाली एक सरणी A है। हमें सरणी के सभी एलिमेंट्स के फैक्टोरियल का GCD निकालना है। मान लीजिए एलिमेंट्स {3, 4, 8, 6} हैं, तो फैक्टोरियल का GCD 6 होगा। यहां हम ट्रिक देखेंगे। चूंकि दो संख्याओं का GCD वह सबसे बड़ी संख्या है जो दोनों को विभाजित करती है, तो दो संख्याओं के फैक्