Sorting element of an array by frequency in decreasing order
Last Updated :
12 Nov, 2023
Given an array arr[] of N integers. The task is to sort the array arr[] according to the frequency of elements in decreasing order.
Note: If the frequencies of the two elements are the same, then the smaller element should come first.
Examples:
Input: arr[] = { 4, 4, 5, 6, 4, 2, 2, 8, 5 }
Output: 4 4 4 2 2 5 5 6 8
Input: arr[] = { 9, 9, 5, 8, 5 }
Output: 5 5 9 9 8
Approach:
- Store the frequency of all elements in array arr[].
- For arr[] = { 4, 4, 5, 6, 4, 2, 2, 8, 5 }
The frequency array of the above array is:
freq[] = { 0, 0, 2, 0, 3, 2, 0, 1, 0, 1} - Traverse the frequency array and for all the element having frequency greater than 1, update the value in the array arr[] as:
freq[2] = 2
arr[0] = 100000*freq[2] + (100000 - 2) = 299998
freq[4] = 3
arr[1] = 100000*freq[2] + (100000 - 4) = 399996
freq[5] = 2
arr[2] = 100000*freq[2] + (100000 - 5) = 299995
freq[6] = 2
arr[3] = 100000*freq[2] + (100000 - 6) = 199994
freq[8] = 2
arr[4] = 100000*freq[2] + (100000 - 2) = 199994
Now array becomes:
arr[] = {299998, 399996, 299995, 199994, 199992, 2, 2, 8, 5}
- Sort the array arr[] in decreasing order.
- Traverse the array arr[] and to get the element and frequency of that element as per the updation of array element in step 2, do the following:
To get the frequency of current element:
frequency = arr[i]/100000;
To get the value:
value = 100000 - arr[i]%100000
For Example:
if arr[i] = 399996
frequency = arr[i]/100000 = 399996/100000 = 3
value = 100000 - arr[i]%100000 = 100000 - 99996 = 4
The element 4 is having frequency 3.
- For each element in arr[] find the value and frequency(say f) at each index and print the value f number of times.
Below is the implementation of the above approach:
C++
// C++ program to sort an array in
// decreasing order of their frequency
#include "bits/stdc++.h"
using namespace std;
// Function that return the index
// upto all the array elements are
// updated.
int sortByFreq(int* arr, int n)
{
// Initialise maxE = -1
int maxE = -1;
// Find the maximum element of
// arr[]
for (int i = 0; i < n; i++) {
maxE = max(maxE, arr[i]);
}
// Create frequency array freq[]
int freq[maxE + 1] = { 0 };
// Update the frequency array as
// per the occurrence of element in
// arr[]
for (int i = 0; i < n; i++) {
freq[arr[i]]++;
}
// Initialise cnt to 0
int cnt = 0;
// Traversing freq[]
for (int i = 0; i <= maxE; i++) {
// If freq of an element is
// greater than 0 update the
// value of arr[] at index cnt
// & increment cnt
if (freq[i] > 0) {
int value = 100000 - i;
arr[cnt] = 100000 * freq[i] + value;
cnt++;
}
}
// Return cnt
return cnt;
}
// Function that print array arr[]
// elements in sorted order
void printSortedArray(int* arr, int cnt)
{
// Traversing arr[] till index cnt
for (int i = 0; i < cnt; i++) {
// Find frequency of elements
int frequency = arr[i] / 100000;
// Find value at index i
int value = 100000 - (arr[i] % 100000);
// Traversing till frequency
// to print value at index i
for (int j = 0; j < frequency; j++) {
cout << value << ' ';
}
}
}
// Driver code
int main()
{
int arr[] = { 4, 4, 5, 6, 4, 2, 2, 8, 5 };
// Size of array arr[]
int n = sizeof(arr) / sizeof(arr[0]);
// Function call to get cnt
int cnt = sortByFreq(arr, n);
// Sort the arr[] in decreasing order
sort(arr, arr + cnt, greater<int>());
// Function that prints elements
// in decreasing order
printSortedArray(arr, cnt);
return 0;
}
Java
// Java program to sort an array in
// decreasing order of their frequency
import java.util.*;
class GFG{
// Function that return the index
// upto all the array elements are
// updated.
static int sortByFreq(Integer []arr, int n)
{
// Initialise maxE = -1
int maxE = -1;
// Find the maximum element of
// arr[]
for (int i = 0; i < n; i++) {
maxE = Math.max(maxE, arr[i]);
}
// Create frequency array freq[]
int freq[] = new int[maxE + 1];
// Update the frequency array as
// per the occurrence of element in
// arr[]
for (int i = 0; i < n; i++) {
freq[arr[i]]++;
}
// Initialise cnt to 0
int cnt = 0;
// Traversing freq[]
for (int i = 0; i <= maxE; i++) {
// If freq of an element is
// greater than 0 update the
// value of arr[] at index cnt
// & increment cnt
if (freq[i] > 0) {
int value = 100000 - i;
arr[cnt] = 100000 * freq[i] + value;
cnt++;
}
}
// Return cnt
return cnt;
}
// Function that print array arr[]
// elements in sorted order
static void printSortedArray(Integer []arr, int cnt)
{
// Traversing arr[] till index cnt
for (int i = 0; i < cnt; i++) {
// Find frequency of elements
int frequency = arr[i] / 100000;
// Find value at index i
int value = 100000 - (arr[i] % 100000);
// Traversing till frequency
// to print value at index i
for (int j = 0; j < frequency; j++) {
System.out.print(value + " ");
}
}
}
// Driver code
public static void main(String[] args)
{
Integer arr[] = { 4, 4, 5, 6, 4, 2, 2, 8, 5 };
// Size of array arr[]
int n = arr.length;
// Function call to get cnt
int cnt = sortByFreq(arr, n);
// Sort the arr[] in decreasing order
Arrays.sort(arr, Collections.reverseOrder());
// Function that prints elements
// in decreasing order
printSortedArray(arr, cnt);
}
}
// This code is contributed by sapnasingh4991
Python3
# Python program to sort an array in
# decreasing order of their frequency
# Function that return the index
# upto all the array elements are
# updated.
def sortByFreq(arr, n):
# Initialise maxE = -1
maxE = -1;
# Find the maximum element of
# arr[]
for i in range(n):
maxE = max(maxE, arr[i])
# Create frequency array freq[]
freq = [0]*(maxE + 1);
# Update the frequency array as
# per the occurrence of element in
# arr[]
for i in range(n):
freq[arr[i]] += 1;
# Initialise cnt to 0
cnt = 0;
# Traversing freq[]
for i in range(maxE+1):
# If freq of an element is
# greater than 0 update the
# value of arr[] at index cnt
# & increment cnt
if (freq[i] > 0):
value = 100000 - i;
arr[cnt] = 100000 * freq[i] + value;
cnt += 1;
# Return cnt
return cnt;
# Function that print array arr[]
# elements in sorted order
def printSortedArray(arr, cnt):
# Traversing arr[] till index cnt
for i in range(cnt):
# Find frequency of elements
frequency = arr[i] / 100000;
# Find value at index i
value = 100000 - (arr[i] % 100000);
# Traversing till frequency
# to print value at index i
for j in range(int(frequency)):
print(value, end=" ")
# Driver code
if __name__=='__main__':
arr = [ 4, 4, 5, 6, 4, 2, 2, 8, 5 ]
# Size of array arr[]
n = len(arr)
# Function call to get cnt
cnt = sortByFreq(arr, n);
# Sort the arr[] in decreasing order
arr.sort(reverse = True)
# Function that prints elements
# in decreasing order
printSortedArray(arr, cnt);
# This code is contributed by Princi Singh
C#
// C# program to sort an array in
// decreasing order of their frequency
using System;
class GFG {
// Function that return the index
// upto all the array elements are
// updated.
static int sortByFreq(int[] arr, int n)
{
// Initialise maxE = -1
int maxE = -1;
// Find the maximum element of
// arr[]
for (int i = 0; i < n; i++)
{
maxE = Math.Max(maxE, arr[i]);
}
// Create frequency array freq[]
int[] freq = new int[maxE + 1];
// Update the frequency array as
// per the occurrence of element in
// arr[]
for (int i = 0; i < n; i++)
{
freq[arr[i]]++;
}
// Initialise cnt to 0
int cnt = 0;
// Traversing freq[]
for (int i = 0; i <= maxE; i++)
{
// If freq of an element is
// greater than 0 update the
// value of arr[] at index cnt
// & increment cnt
if (freq[i] > 0)
{
int value = 100000 - i;
arr[cnt] = 100000 * freq[i] + value;
cnt++;
}
}
// Return cnt
return cnt;
}
// Function that print array arr[]
// elements in sorted order
static void printSortedArray(int[] arr, int cnt)
{
// Traversing arr[] till index cnt
for (int i = 0; i < cnt; i++)
{
// Find frequency of elements
int frequency = arr[i] / 100000;
// Find value at index i
int value = 100000 - (arr[i] % 100000);
// Traversing till frequency
// to print value at index i
for (int j = 0; j < frequency; j++)
{
Console.Write(value + " ");
}
}
}
// Driver code
public static void Main()
{
int[] arr = { 4, 4, 5, 6, 4, 2, 2, 8, 5 };
// Size of array arr[]
int n = arr.Length;
// Function call to get cnt
int cnt = sortByFreq(arr, n);
// Sort the arr[] in decreasing order
Array.Sort(arr);
Array.Reverse(arr);
// Function that prints elements
// in decreasing order
printSortedArray(arr, cnt);
}
}
// This code is contributed by subhamahato348
JavaScript
<script>
// JavaScript program to sort an array in
// decreasing order of their frequency
// Function that return the index
// upto all the array elements are
// updated.
function sortByFreq(arr, n) {
// Initialise maxE = -1
var maxE = -1;
// Find the maximum element of
// arr[]
for (var i = 0; i < n; i++) {
maxE = Math.max(maxE, arr[i]);
}
// Create frequency array freq[]
var freq = new Array(maxE + 1).fill(0);
// Update the frequency array as
// per the occurrence of element in
// arr[]
for (var i = 0; i < n; i++) {
freq[arr[i]]++;
}
// Initialise cnt to 0
var cnt = 0;
// Traversing freq[]
for (var i = 0; i <= maxE; i++) {
// If freq of an element is
// greater than 0 update the
// value of arr[] at index cnt
// & increment cnt
if (freq[i] > 0) {
var value = 100000 - i;
arr[cnt] = 100000 * freq[i] + value;
cnt++;
}
}
// Return cnt
return cnt;
}
// Function that print array arr[]
// elements in sorted order
function printSortedArray(arr, cnt) {
// Traversing arr[] till index cnt
for (var i = 0; i < cnt; i++) {
// Find frequency of elements
var frequency = parseInt(arr[i] / 100000);
// Find value at index i
var value = 100000 - (arr[i] % 100000);
// Traversing till frequency
// to print value at index i
for (var j = 0; j < frequency; j++) {
document.write(value + " ");
}
}
}
// Driver code
var arr = [4, 4, 5, 6, 4, 2, 2, 8, 5];
// Size of array arr[]
var n = arr.length;
// Function call to get cnt
var cnt = sortByFreq(arr, n);
// Sort the arr[] in decreasing order
arr.sort((a, b) => b - a);
// Function that prints elements
// in decreasing order
printSortedArray(arr, cnt);
</script>
Time Complexity: O(N*log N)
Auxiliary Space: O(N)
STL Pair and Comparator based approach :
Approach:
1. Store the frequency of each element in a map.
2. Iterate the map and store the each element and it's frequency in a vector of pairs.
3. Pass a comparator which sorts the elements in decreasing order of their frequency and by elements value if frequency is equal.
4.Push the elements their frequency number of times inside the final array.
C++
#include<bits/stdc++.h>
using namespace std;
bool compare(pair<int,int>p1,pair<int,int>p2)
{
if(p1.second==p2.second) //if frequency is equal
{
return p1.first<p2.first; //return the smaller value
}
return p1.second>p2.second; //return the element with greater frequency
}
int main()
{
vector<int>arr={4,4,5,6,4,2,2,8,5};
int n=arr.size();
map<int,int>m;
for(int i=0;i<n;i++)
{
m[arr[i]]+=1;
}
vector<pair<int,int>>a;
for(auto it=m.begin();it!=m.end();it++)
{
a.push_back(make_pair(it->first,it->second)); //making pair of element and it's frequency
}
sort(a.begin(),a.end(),compare);
vector<int>ans;
for(auto x:a)
{
while(x.second--)
{
ans.push_back(x.first);
}
}
for(auto x:ans)
{
cout<<x<<" ";
}
return 0;
}
Java
// Java code for the approach
import java.util.*;
public class Main {
public static int compare(int[] p1, int[] p2) {
if (p1[1] == p2[1]) //if frequency is equal
{
return p1[0] - p2[0]; //return the smaller value
}
return p2[1] - p1[1]; //return the element with greater frequency
}
public static void main(String[] args) {
int[] arr = { 4, 4, 5, 6, 4, 2, 2, 8, 5 };
int n = arr.length;
Map<Integer, Integer> m = new HashMap<Integer, Integer>();
for (int i = 0; i < n; i++) {
if (m.containsKey(arr[i])) {
m.put(arr[i], m.get(arr[i]) + 1);
} else
m.put(arr[i], 1);
}
int[][] a = new int[m.size()][2];
int i = 0;
for (Map.Entry<Integer, Integer> x : m.entrySet()) {
a[i][0] = x.getKey();
a[i][1] = x.getValue();
i++;
}
Arrays.sort(a, Main::compare);
int[] ans = new int[n];
int j = 0;
for (int[] x : a) {
while (x[1]-- > 0) {
ans[j++] = x[0];
}
}
for (int x : ans) {
System.out.print(x + " ");
}
}
}
Python3
# Python code for the approach
from functools import cmp_to_key
def compare(p1, p2):
if(p1[1] == p2[1]): #if frequency is equal
return p1[0] - p2[0] #return the smaller value
return p2[1] - p1[1] #return the element with greater frequency
# driver code
arr = [4, 4, 5, 6, 4, 2, 2, 8, 5]
n = len(arr)
m = {}
for i in range(n):
if(arr[i] in m):
m[arr[i]] = m[arr[i]] + 1
else:
m[arr[i]] = 1
a = []
for x,y in m.items():
a.append([x,y]) #making pair of element and it's frequency
a.sort(key = cmp_to_key(compare))
ans = []
for x in a:
while(x[1]):
ans.append(x[0])
x[1] -= 1
for x in ans:
print(x, end = " ")
# This code is contributed by shinjanpatra
C#
using System;
using System.Collections.Generic;
class Program {
static int Compare(KeyValuePair<int, int> p1, KeyValuePair<int, int> p2) {
if (p1.Value == p2.Value) {
return p1.Key.CompareTo(p2.Key);
}
return p2.Value.CompareTo(p1.Value);
}
static void Main(string[] args) {
List<int> arr = new List<int>{4, 4, 5, 6, 4, 2, 2, 8, 5};
Dictionary<int, int> m = new Dictionary<int, int>();
for (int i = 0; i < arr.Count; i++) {
if (!m.ContainsKey(arr[i])) {
m[arr[i]] = 0;
}
m[arr[i]]++;
}
List<KeyValuePair<int, int>> a = new List<KeyValuePair<int, int>>();
foreach (KeyValuePair<int, int> entry in m) {
a.Add(entry);
}
a.Sort(Compare);
List<int> ans = new List<int>();
foreach (KeyValuePair<int, int> x in a) {
for (int i = 0; i < x.Value; i++) {
ans.Add(x.Key);
}
}
foreach (int x in ans) {
Console.Write(x + " ");
}
}
}
// This code has been contributed by Prince Kumar
JavaScript
<script>
// JavaScript code for the approach
function compare(p1, p2)
{
if(p1[1] == p2[1]) //if frequency is equal
{
return p1[0] - p2[0]; //return the smaller value
}
return p2[1] - p1[1]; //return the element with greater frequency
}
// driver code
let arr = [4,4,5,6,4,2,2,8,5];
let n = arr.length;
let m = new Map();
for(let i = 0; i < n; i++)
{
if(m.has(arr[i])){
m.set(arr[i], m.get(arr[i]) + 1);
}
else m.set(arr[i],1);
}
let a = [];
for(let [x,y] of m)
{
a.push([x,y]); //making pair of element and it's frequency
}
a.sort(compare);
let ans = [];
for(let x of a){
while(x[1]--){
ans.push(x[0]);
}
}
for(let x of ans)
{
document.write(x," ");
}
// This code is contributed by shinjanpatra
</script>
Time Complexity: O(N*logN) as sort() takes N*logN time (Here N is size of input array). Also, insertion in ordered map takes logN time and since N insertions are done so it also contributes N*logN time. So overall complexity will be O(N*logN).
Using priority_queue:
This approach is based on the idea to use priority_queue with pair of elements as its entry element. The first element of the pair will be frequency of element of the array and second one will be the array element itself. By inserting elements this way in the priority_queue, we will be having highest frequency element at top. So when we pop the priority_queue, we will be having the second entry of the pair which was at top of the priority_queue as our element of the result array. To store the frequency we will be using map as this frequency will be inserted along with element in the priority_queue.
We will be using custom comparator for the priority_queue which sorts the elements in decreasing order of their frequency and by elements value if frequency is equal.
Algorithm:
- Create a class named 'Compare' to define a custom comparison operator for a priority queue of pairs of integers.
- In the 'Compare' class, define the comparison operator such that pairs are sorted first by their first element in descending order, and then by their second element in ascending order.
- Create a map to store the frequency of each element in the array.
- Traverse through the array and increment the frequency of each element in the map.
- Create a priority queue to store pairs of elements and their frequency in decreasing order.
- Traverse through the map and insert each element and its frequency into the priority queue.
- Declare a new array to store the sorted elements.
- Traverse through the priority queue and insert the elements into the new array based on their frequency.
- Return the resultant array res.
- Output the sorted array.
Below is the implementation of the approach:
C++
// C++ code for the approach
#include <bits/stdc++.h>
using namespace std;
// based on first part in descending and second part in
// ascending first basis
class Compare {
public:
bool operator()(pair<int, int> p1, pair<int, int> p2)
{
if (p1.first == p2.first) {
return p1.second > p2.second;
}
return p1.first < p2.first;
}
};
// Function to sort the array according
// to the frequency of elements
vector<int> sortByFrequency(int arr[], int n) {
// Declare a map to store the frequency
// of each element of the array
map<int, int> freqMap;
// Traverse through the array
for (int i = 0; i < n; i++) {
freqMap[arr[i]]++;
}
// Declare a priority queue to store the
// elements according to their frequency
// in decreasing order
priority_queue<pair<int, int>, vector<pair<int, int>>, Compare > pq;
// Traverse through the map and insert each
// element in the priority queue
for (auto it = freqMap.begin(); it != freqMap.end();
it++) {
pq.push(make_pair(it->second, it->first));
}
// Declare a new array to store the result
vector<int> res;
// Traverse through the priority queue and
// insert the elements in the result array
int index = 0;
while (!pq.empty()) {
int freq = pq.top().first;
int element = pq.top().second;
pq.pop();
for (int i = 0; i < freq; i++) {
res.push_back( element );
}
}
return res;
}
// Driver Code
int main() {
// Input array
int arr[] = { 4, 4, 5, 6, 4, 2, 2, 8, 5 };
int n = sizeof(arr) / sizeof(int);
// Function Call
vector<int> ans = sortByFrequency(arr, n);
// Output the sorted array
for (int i = 0; i < n; i++) {
cout << ans[i] << " ";
}
return 0;
}
Java
import java.util.*;
public class Main {
public static void main(String[] args) {
// Input array
int[] arr = {4, 4, 5, 6, 4, 2, 2, 8, 5};
// Function Call
List<Integer> ans = sortByFrequency(arr);
// Output the sorted array
for (int element : ans) {
System.out.print(element + " ");
}
}
// Function to sort the array according
// to the frequency of elements
static List<Integer> sortByFrequency(int[] arr) {
// Create a HashMap to count the frequency of each element
Map<Integer, Integer> freqMap = new HashMap<>();
// Traverse through the array
for (int element : arr) {
freqMap.put(element, freqMap.getOrDefault(element, 0) + 1);
}
// Sort the elements by their frequency in descending order
List<Map.Entry<Integer, Integer>> sortedElements = new ArrayList<>(freqMap.entrySet());
sortedElements.sort((a, b) -> {
int freqComparison = Integer.compare(b.getValue(), a.getValue());
return (freqComparison == 0) ? Integer.compare(a.getKey(), b.getKey()) : freqComparison;
});
// Declare a new list to store the result
List<Integer> res = new ArrayList<>();
// Traverse through the sorted elements and
// insert the elements in the result list
for (Map.Entry<Integer, Integer> entry : sortedElements) {
int element = entry.getKey();
int freq = entry.getValue();
for (int i = 0; i < freq; i++) {
res.add(element);
}
}
return res;
}
}
Python3
from collections import Counter
# Function to sort the array according
# to the frequency of elements
def sort_by_frequency(arr):
# Create a Counter to count the frequency of each element
freq_map = Counter(arr)
# Sort the elements by their frequency in descending order
sorted_elements = sorted(freq_map.items(), key=lambda x: (-x[1], x[0]))
# Declare a new list to store the result
res = []
# Traverse through the sorted elements and
# insert the elements in the result list
for element, freq in sorted_elements:
res.extend([element] * freq)
return res
# Driver Code
if __name__ == "__main__":
# Input array
arr = [4, 4, 5, 6, 4, 2, 2, 8, 5]
# Function Call
ans = sort_by_frequency(arr)
# Output the sorted array
for element in ans:
print(element, end=" ")
C#
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
// Function to sort the array according
// to the frequency of elements
static List<int> SortByFrequency(List<int> arr)
{
// Create a Dictionary to count the frequency of each element
Dictionary<int, int> freqMap = new Dictionary<int, int>();
// Populate the frequency map
foreach (int element in arr)
{
if (freqMap.ContainsKey(element))
{
freqMap[element]++;
}
else
{
freqMap[element] = 1;
}
}
// Sort the elements by their frequency in descending order
var sortedElements = freqMap.OrderByDescending(x => x.Value).ThenBy(x => x.Key);
// Declare a new list to store the result
List<int> res = new List<int>();
// Traverse through the sorted elements and
// insert the elements in the result list
foreach (var kvp in sortedElements)
{
int element = kvp.Key;
int freq = kvp.Value;
res.AddRange(Enumerable.Repeat(element, freq));
}
return res;
}
static void Main(string[] args)
{
// Input array
List<int> arr = new List<int> { 4, 4, 5, 6, 4, 2, 2, 8, 5 };
// Function Call
List<int> ans = SortByFrequency(arr);
// Output the sorted array
foreach (int element in ans)
{
Console.Write(element + " ");
}
}
}
JavaScript
function sortByFrequency(arr) {
// Create a Map to count the frequency of each element
const freqMap = new Map();
// Traverse through the array
for (const element of arr) {
freqMap.set(element, (freqMap.get(element) || 0) + 1);
}
// Sort the elements by their frequency in descending order
const sortedElements = [...freqMap.entries()].sort((a, b) => {
const freqComparison = b[1] - a[1];
return freqComparison === 0 ? a[0] - b[0] : freqComparison;
});
// Create a new array to store the result
const res = [];
// Traverse through the sorted elements and insert the elements in the result array
for (const [element, freq] of sortedElements) {
for (let i = 0; i < freq; i++) {
res.push(element);
}
}
return res;
}
// Input array
const arr = [4, 4, 5, 6, 4, 2, 2, 8, 5];
// Function call
const ans = sortByFrequency(arr);
// Output the sorted array
console.log(ans.join(' '));
Time Complexity: O(n * log2n) where n is the size of input array. This is because priority_queue insertion takes (n * log2n) time as n elements are inserted.
Space Complexity: O(n) where n is size of input array. This is because freqMap map and res vector has been created.
Similar Reads
Find the frequency of each element in a sorted array
Given a sorted array, arr[] consisting of N integers, the task is to find the frequencies of each array element. Examples: Input: arr[] = {1, 1, 1, 2, 3, 3, 5, 5, 8, 8, 8, 9, 9, 10} Output: Frequency of 1 is: 3 Frequency of 2 is: 1 Frequency of 3 is: 2 Frequency of 5 is: 2 Frequency of 8 is: 3 Frequ
10 min read
Cumulative frequency of count of each element in an unsorted array
Given an unsorted array. The task is to calculate the cumulative frequency of each element of the array using a count array.Examples: Input : arr[] = [1, 2, 2, 1, 3, 4]Output :1->2 2->4 3->5 4->6Input : arr[] = [1, 1, 1, 2, 2, 2]Output :1->3 2->6 A simple solution is to use two nes
9 min read
Sort elements by frequency | Set 4 (Efficient approach using hash)
Print the elements of an array in the decreasing frequency if 2 numbers have the same frequency then print the one which came first. Examples: Input : arr[] = {2, 5, 2, 8, 5, 6, 8, 8} Output : arr[] = {8, 8, 8, 2, 2, 5, 5, 6} Input : arr[] = {2, 5, 2, 6, -1, 9999999, 5, 8, 8, 8} Output : arr[] = {8,
12 min read
Frequency of an element in an array
Given an array, a[], and an element x, find a number of occurrences of x in a[].Examples: Input : a[] = {0, 5, 5, 5, 4} x = 5Output : 3Input : a[] = {1, 2, 3} x = 4Output : 0Unsorted ArrayThe idea is simple, we initialize count as 0. We traverse the array in a linear fashion. For every element that
9 min read
Most frequent element in an array
Given an array, the task is to find the most frequent element in it. If there are multiple elements that appear a maximum number of times, return the maximum element.Examples: Input : arr[] = [1, 3, 2, 1, 4, 1]Output : 1Explanation: 1 appears three times in array which is maximum frequency.Input : a
10 min read
Operations to Sort an Array in non-decreasing order
Given an array arr[] of integers of size n, the task is to check if we can sort the given array in non-decreasing order(i, e.arr[i] ⤠arr[i+1]) by using two types of operation by performing any numbers of time: You can choose any index from 1 to n-1(1-based indexing) and increase arr[i] and arr[i+1]
7 min read
Least frequent element in an array
Given an array, find the least frequent element in it. If there are multiple elements that appear least number of times, print any one of them. Examples : Input : arr[] = {1, 3, 2, 1, 2, 2, 3, 1}Output : 3Explanation: 3 appears minimum number of times in given array. Input : arr[] = {10, 20, 30}Outp
11 min read
Sort elements by frequency using Binary Search Tree
Given an array of integers arr[], sort the array according to the frequency of elements, i.e. elements that have higher frequency comes first. If the frequencies of two elements are the same, then the smaller number comes first.Examples: Input: arr[] = [5, 5, 4, 6, 4]Output: [4, 4, 5, 5, 6]Explanati
15+ min read
Print array elements in alternatively increasing and decreasing order
Given an array of N elements. The task is to print the array elements in such a way that first two elements are in increasing order, next 3 in decreasing order, next 4 in increasing order and so on. Examples: Input : arr = {2, 6, 2, 4, 0, 1, 4, 8, 2, 0, 0, 5,2,2} Output : 0 0 8 6 5 0 1 2 2 4 4 2 2 2
12 min read
Count of smaller or equal elements in sorted array
Given a sorted array of size n. Find a number of elements that are less than or equal to a given element. Examples: Input : arr[] = {1, 2, 4, 5, 8, 10} key = 9 Output : 5 Elements less than or equal to 9 are 1, 2, 4, 5, 8 therefore result will be 5. Input : arr[] = {1, 2, 2, 2, 5, 7, 9} key = 2 Outp
15+ min read