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

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

इस समस्या में, हमें आकार n का एक सरणी arr[], आकार m का सरणी del[] और एक पूर्णांक k दिया जाता है। हमारा काम दिए गए तत्वों को हटाने के बाद k सबसे छोटी संख्या खोजना है

हमें डेल [] सरणी में मौजूद सभी तत्वों को हटाने के बाद मिले सरणी [] से पहले k सबसे छोटे तत्वों को प्रिंट करने की आवश्यकता है। यदि सरणी में दो उदाहरण मौजूद हैं तो पहले उदाहरण को हटा दें।

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

Input : arr[] = {3, 5, 1, 7, 9, 2}, del[] = {1, 9, 3}, k = 2
Output : 2, 5

स्पष्टीकरण -

Array arr[] after deleting the elements : {5, 7, 2}
2 minimum elements are 2, 5.

समाधान दृष्टिकोण

समस्या का एक सरल समाधान एआर [] से सभी तत्वों को हटाकर है जो डेल [] में मौजूद हैं। फिर सरणी को आरोही क्रम में क्रमबद्ध करें और सरणी के पहले 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<<" smallest numbers after deleting the elements are ";
   findKminElementDelArray(array, m, del, n, k);
   return 0;
}

आउटपुट

2 smallest numbers after deleting the elements are 2 5

एक और तरीका

समस्या को हल करने का एक और तरीका हैशपैप और हीप का उपयोग करना है। हम एक मिन-हीप और हैश मैप बनाएंगे। हैशमैप में सरणी डेल [] के सभी तत्व शामिल होंगे। और फिर सरणी के तत्वों को एआर [] डालें जो हैश-मैप में मिन-हीप में मौजूद नहीं हैं। ढेर से 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<<" smallest numbers after deleting the elements are ";
   findKminElementDelArray(array, m, del, n, k);
   return 0;
}

आउटपुट

2 smallest numbers after deleting the elements are 2 5

  1. C++ में दिए गए अंतर के साथ एक जोड़ी खोजें

    विचार करें कि हमारे पास एक सरणी A है, n विभिन्न तत्व हैं। हमें सरणी A से एक युग्म (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 से। तो तत्व 0th . पर सूचकांक 0 है। यदि हमें स

  1. C++ में दिए गए सरणी के तत्वों के भाज्य का GCD ज्ञात कीजिए

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