इस समस्या में, हमें n तत्वों की एक सरणी arr[] दी गई है। हमारा कार्य सरणी के k अधिकतम तत्वों को मूल क्रम में ढूंढना है।
हमें सरणी के k अधिकतम तत्व ढूंढने हैं और फिर उन्हें प्रिंट करना है जैसे वे मूल रूप से अनुक्रमित थे।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: arr[] = {5, 1, 3, 6, 2}, k = 2
आउटपुट: 5, 6
व्याख्या:
सरणी के सबसे बड़े दो तत्व 6 और 5 हैं। लेकिन 5 मूल सरणी में 6 से पहले आता है इसलिए हमने उस तरह प्रिंट किया है।
समाधान दृष्टिकोण
समस्या को हल करने के लिए, और मूल क्रम में k तत्व प्रिंट करने के लिए।
इसके लिए हम एक decArray बनाएंगे जो arr[] के तत्वों को अवरोही क्रम में संग्रहीत करेगा। फिर हम मूल सरणी को ट्रैवर्स करेंगे और decArray[] का उपयोग करके k सबसे बड़े तत्व को क्रम में प्रिंट करेंगे।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#include <bits/stdc++.h>
using namespace std;
bool seachVal(int decArr[], int k, int ele){
for(int i = 0; i < k; i++){
if( decArr[i] == ele)
return true;
}
return false;
}
void printKMaxEle(int arr[], int k, int n) {
int decArr[n];
for(int i = 0; i < n ; i++){
decArr[i] = arr[i];
}
sort(decArr, decArr + n, greater<int>());
for (int i = 0; i < n; ++i)
if ( seachVal(decArr, k, arr[i]) )
cout<<arr[i]<<" ";
}
int main() {
int arr[] = { 15, 1, 3, 6, 2, 34, 8, 9 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
cout<<k<<" maximum elements of the array in their original order are \n";
printKMaxEle(arr, k, n);
return 0;
}
आउटपुट
3 maximum elements of the array in their original order are 15 34 9