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 times
Input: 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:
- Print 2-D co-ordinate points in ascending order followed by their frequencies
- Sort prime numbers of an array in descending order
- Descending order in Map and Multimap of C++ STL
- How to sort an Array in descending order using STL in C++?
- How to sort a Vector in descending order using STL in C++?
- Sorting of Vector of Tuple in C++ (Descending Order)
- Sorting 2D Vector in C++ | Set 2 (In descending order by row and column)
- 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
- Print N lines of 4 numbers such that every pair among 4 numbers has a GCD K
- Find two numbers whose divisors are given in a random order
- Print all possible consecutive numbers with sum N
- Print numbers with digits 0 and 1 only such that their sum is N
- Print all numbers less than N with at-most 2 unique digits
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.