हमें मान 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 के बीच की संख्या वाले सरणियों के लिए काम करता है।
-
फ़ंक्शन प्रिंटफ्रीक्वेंसी(int arr[],int n) इनपुट के रूप में एक सरणी और उसका आकार n लेता है और सरणी में मौजूद 1 से 10 के बीच की संख्याओं की संख्या देता है।
-
हम arr[i]=arr[i]-1 बनाते हैं ताकि प्रत्येक इंडेक्स संख्या i, 1 स्टोर किए गए एटिनडेक्स 0 और इसी तरह की आवृत्ति को स्टोर करे।
-
प्रत्येक आवृत्ति arr[arr[i]%10] पर लूप के लिए उपयोग करके मूल मान में 10 जोड़ें।
-
x गुणा के लिए 10 जोड़ दिया जाएगा यदि संख्या i सरणी में x बार आती है।
-
अब अनुक्रमणिका i पर सभी तत्वों i+1 के लिए arr[i]/10 का उपयोग करके लूप प्रिंट आवृत्तियों के लिए उपयोग करना।
उदाहरण
#include<bits/stdc++.h> using namespace std; void printfrequency(int arr[],int n){ int i=0; //1 becomes 0, 2 becomes 1 .....10 becomes 9 so arr[i] will have count of i for ( i =0; i<n; i++) arr[i] = arr[i]-1; //as numbers are between 1-10 add 10 to all (num%10 is num itself) for (i=0; i<n; i++) arr[arr[i]%10] = arr[arr[i]%10] + 10; for (i =0; i<10; i++) cout << i + 1 << " -> " << 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