Sort Array by Increasing Frequency

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem

Sort elements by frequency ascending. Equal frequencies: sort by value descending.

Solutions

# Python
from collections import Counter

def frequencySort(nums):
    count = Counter(nums)
    return sorted(nums, key=lambda x: (count[x], -x))
// C++
vector<int> frequencySort(vector<int>& nums) {
    unordered_map<int,int>cnt; for(int n:nums)cnt[n]++;
    sort(nums.begin(),nums.end(),[&](int a,int b){
        return cnt[a]!=cnt[b]?cnt[a]<cnt[b]:a>b;});
    return nums;
}
// Java
public int[] frequencySort(int[] nums) {
    Map<Integer,Integer>cnt=new HashMap<>();for(int n:nums)cnt.merge(n,1,Integer::sum);
    Integer[]arr=new Integer[nums.length]; for(int i=0;i<nums.length;i++)arr[i]=nums[i];
    Arrays.sort(arr,(a,b)->cnt.get(a)!=cnt.get(b)?cnt.get(a)-cnt.get(b):b-a);
    for(int i=0;i<nums.length;i++)nums[i]=arr[i];
    return nums;
}
// JavaScript
function frequencySort(nums) {
    const cnt = new Map();
    for (const n of nums) cnt.set(n, (cnt.get(n)||0)+1);
    return [...nums].sort((a,b)=>cnt.get(a)!==cnt.get(b)?cnt.get(a)-cnt.get(b):b-a);
}

Complexity

  • Time: O(n log n), Space: O(n)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro