हमें 1 से n तक के मानों वाली तत्वों की एक सरणी दी गई है। कुछ तत्व दोहराए गए हैं, और कुछ गायब हैं। लक्ष्य O(n) समय और O(1) अतिरिक्त स्थान में सभी तत्वों की आवृत्ति ढूंढना है।
इनपुट
Arr[]= { 1,2,2,3,4,4,4,5 } आउटपुट
1→ 1, 2 → 2, 3→ 1, 4→ 3, 5→ 5
व्याख्या: उच्चतम तत्व 5 है, आउटपुट सरणी में प्रत्येक तत्व के प्रकट होने की संख्या दिखाता है।
इनपुट
Arr[]= { 1,4,4,5,5,5,5 } आउटपुट
1→ 1, 2 →0, 3→ 0, 4→ 2, 5→ 4
व्याख्या: उच्चतम तत्व 5 है, आउटपुट सरणी में प्रत्येक तत्व के प्रकट होने की संख्या दिखाता है।
प्रयुक्त दृष्टिकोण
- नीचे दिया गया प्रोग्राम 1 से 10 के बीच की संख्याओं वाली सरणियों के लिए काम करता है।
- फ़ंक्शन printfrequency(int arr[],int n) एक सरणी और इसके आकार n को इनपुट के रूप में लेता है और सरणी में मौजूद 1 से 10 के बीच की संख्याओं की संख्या लौटाता है।
- हम arr[i]=arr[i]-1 बनाते हैं ताकि प्रत्येक इंडेक्स संख्या i की आवृत्ति संग्रहीत करे, 1 इंडेक्स 0 पर संग्रहीत हो और इसी तरह।
- for लूप का उपयोग करके प्रत्येक आवृत्ति arr[arr[i]%10] पर मूल मान में 10 जोड़ें।
- यदि संख्या i सरणी में x बार होती है तो x बार 10 जोड़ा जाएगा।
- अब for लूप का उपयोग करके arr[i]/10 का उपयोग करके सभी तत्वों i+1 की आवृत्ति इंडेक्स i पर प्रिंट करें।
उदाहरण कोड
#include<bits/stdc++.h> using namespace std; void printfrequency(int arr[],int n){ int i=0; //1 बन जाता है 0, 2 बन जाता है 1 .....10 बन जाता है 9 ताकि arr[i] में i की गणना हो for ( i =0; i " << arr[i]/10 << endl; } int main(){ int arr[] = {2, 3, 3, 2, 5, 6, 7, 7, 7, 8, 8, 9, 9}; int n = sizeof(arr)/sizeof(arr[0]); printfrequency(arr,n); return 0; } आउटपुट
1 -> 0 2 -> 2 3 -> 2 4 -> 0 5 -> 1 6 -> 1 7 -> 3 8 -> 2 9 -> 5 10 -> 0