Print numbers in descending order along with their frequencies
Given an array arr, the task is to print the elements of the array in descending order along with their frequencies.
Examples:
Input: arr[] = {1, 3, 3, 3, 4, 4, 5}
Output: 5 occurs 1 times
4 occurs 2 times
3 occurs 3 times
1 occurs 1 timesInput: arr[] = {1, 1, 1, 2, 3, 4, 9, 9, 10}
Output: 10 occurs 1 times
9 occurs 2 times
4 occurs 1 times
3 occurs 1 times
2 occurs 1 times
1 occurs 3 times
Naive approach: Use some Data-Structure (e.g. multiset) which stores elements in decreasing order and then print the elements one by one with it’s count and then erase it from the Data-structure. The time complexity will be O(N log N) and the auxiliary space will be O(N) for the Data-structure used.
Below is the implementation of the above approach:
// C++ program to print the elements in // descending along with their frequencies #include <bits/stdc++.h> using namespace std; // Function to print the elements in descending // along with their frequencies void printElements( int a[], int n) { // A multiset to store elements in decreasing order multiset< int , greater< int > > ms; // Insert elements in the multiset for ( int i = 0; i < n; i++) { ms.insert(a[i]); } // Print the elements along with their frequencies while (!ms.empty()) { // Find the maximum element int maxel = *ms.begin(); // Number of times it occurs int times = ms.count(maxel); cout << maxel << " occurs " << times << " times\n" ; // Erase the maxel ms.erase(maxel); } } // Driver Code int main() { int a[] = { 1, 1, 1, 2, 3, 4, 9, 9, 10 }; int n = sizeof (a) / sizeof (a[0]); printElements(a, n); return 0; } |
10 occurs 1 times 9 occurs 2 times 4 occurs 1 times 3 occurs 1 times 2 occurs 1 times 1 occurs 3 times
Efficient Approach: Sort the array in descending order and then start printing the elements from the beginning along with their frequencies.
Below is the implementation of the above approach:
C++
// C++ program to print the elements in // descending along with their frequencies #include <bits/stdc++.h> using namespace std; // Function to print the elements in descending // along with their frequencies void printElements( int a[], int n) { // Sorts the element in decreasing order sort(a, a + n, greater< int >()); int cnt = 1; // traverse the array elements for ( int i = 0; i < n - 1; i++) { // Prints the number and count if (a[i] != a[i + 1]) { cout << a[i] << " occurs " << cnt << " times\n" ; cnt = 1; } else cnt += 1; } // Prints the last step cout << a[n - 1] << " occurs " << cnt << " times\n" ; } // Driver Code int main() { int a[] = { 1, 1, 1, 2, 3, 4, 9, 9, 10 }; int n = sizeof (a) / sizeof (a[0]); printElements(a, n); return 0; } |
Python3
# Python3 program to print the elements in # descending along with their frequencies # Function to print the elements in # descending along with their frequencies def printElements(a, n) : # Sorts the element in decreasing order a.sort(reverse = True ) cnt = 1 # traverse the array elements for i in range (n - 1 ) : # Prints the number and count if (a[i] ! = a[i + 1 ]) : print (a[i], " occurs " , cnt, "times" ) cnt = 1 else : cnt + = 1 # Prints the last step print (a[n - 1 ], "occurs" , cnt, "times" ) # Driver Code if __name__ = = "__main__" : a = [ 1 , 1 , 1 , 2 , 3 , 4 , 9 , 9 , 10 ] n = len (a) printElements(a, n) # This code is contributed by Ryuga |
PHP
<?php // PHP program to print the elements in // descending along with their frequencies // Function to print the elements in // descending along with their frequencies function printElements(& $a , $n ) { // Sorts the element in // decreasing order rsort( $a ); $cnt = 1; // traverse the array elements for ( $i = 0; $i < $n - 1; $i ++) { // Prints the number and count if ( $a [ $i ] != $a [ $i + 1]) { echo ( $a [ $i ]); echo ( " occurs " ); echo $cnt ; echo ( " times\n" ); $cnt = 1; } else $cnt += 1; } // Prints the last step echo ( $a [ $n - 1]); echo ( " occurs " ); echo $cnt ; echo ( " times\n" ); } // Driver Code $a = array (1, 1, 1, 2, 3, 4, 9, 9, 10 ); $n = sizeof( $a ); printElements( $a , $n ); // This code is contributed // by Shivi_Aggarwal ?> |
10 occurs 1 times 9 occurs 2 times 4 occurs 1 times 3 occurs 1 times 2 occurs 1 times 1 occurs 3 times
Recommended Posts:
- Sort prime numbers of an array in descending order
- Descending order in Map and Multimap of C++ STL
- Sorting 2D Vector in C++ | Set 2 (In descending order by row and column)
- Sorting of Vector of Tuple in C++ (Descending Order)
- Sorting Vector of Pairs in C++ | Set 2 (Sort in descending order by first and second)
- Print number in ascending order which contains 1, 2 and 3 in their digits.
- Print n smallest elements from given array in their original order
- Find two numbers whose divisors are given in a random order
- Print N lines of 4 numbers such that every pair among 4 numbers has a GCD K
- Print numbers with digits 0 and 1 only such that their sum is N
- Print all possible sums of consecutive numbers with sum N
- Print all numbers less than N with at-most 2 unique digits
- Print prime numbers in a given range using C++ STL
- Count all the columns in a matrix which are sorted in descending
- Recursive program to print all numbers less than N which consist of digits 1 or 3 only
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.