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

O(1) अतिरिक्त स्थान और C++ में O(n) समय में सरणी में सभी तत्वों की आवृत्तियों की गणना करें

हमें मान 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

  1. O(n) समय और O(1) अतिरिक्त स्थान में डुप्लिकेट खोजें - C++ में 1 सेट करें

    मान लीजिए हमारे पास 0 से n-1 तक की संख्याओं की एक सूची है। एक संख्या को जितनी बार संभव हो उतनी बार दोहराया जा सकता है। हमें बिना किसी अतिरिक्त स्थान के दोहराई जाने वाली संख्याएँ ज्ञात करनी हैं। यदि n =7, और सूची का मान [5, 2, 3, 5, 1, 6, 2, 3, 4, 5] जैसा है। उत्तर 5, 2, 3 होगा। इसे हल करने के लिए,

  1. सी ++ में प्रमुख आवृत्तियों वाले ऐरे तत्व?

    सरणी समान डेटा प्रकार के तत्वों का एक कंटेनर है। प्राइम फ़्रीक्वेंसी इसका मतलब है कि सरणी के तत्व की घटना की संख्या एक प्रमुख संख्या है। तो, इन परिभाषाओं के आधार पर अभाज्य आवृत्तियों वाले सरणी तत्वों को खोजने में समस्या। हमें सरणी की एक स्ट्रिंग दी गई है। हमें वर्णों की आवृत्ति का पता लगाना होगा

  1. पायथन में सरणी में सभी तत्वों की आवृत्तियों की गणना करें

    इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो एक ऐरे में सभी एलीमेंट्स की फ़्रीक्वेंसी का पता लगाता है। हम इसे अलग-अलग तरीकों से ढूंढ सकते हैं आइए उनमें से दो को देखें। तानाशाही का उपयोग करना ऐरे को इनिशियलाइज़ करें। एक खाली तानाशाही . को प्रारंभ करें । सूची में पुनरावृति करें।