1636. Sort Array by Increasing Frequency - Explanation
Description
You are given an array of integers nums, sort the array in increasing order based on the frequency of the values. If multiple values have the same frequency, sort them in decreasing order.
Return the sorted array.
Example 1:
Input: nums = [1,1,2,2,2,3]
Output: [3,1,1,2,2,2]Explanation: '3' has a frequency of 1, '1' has a frequency of 2, and '2' has a frequency of 3.
Example 2:
Input: nums = [2,3,1,3,2]
Output: [1,3,3,2,2]Explanation: '2' and '3' both have a frequency of 2, so they are sorted in decreasing order.
Constraints:
1 <= nums.length <= 100.-100 <= nums[i] <= 100.
Topics
Prerequisites
Before attempting this problem, you should be comfortable with:
- Hash Maps - Used to count the frequency of each element in the array
- Custom Comparators - Sorting with multi-level criteria (primary by frequency, secondary by value)
- Sorting Algorithms - Understanding how to apply custom sort keys or comparator functions
1. Custom Sort
Intuition
We need to sort elements by how often they appear, with less frequent elements coming first. When two elements have the same frequency, the larger one should come first. A custom comparator lets us define this two-level sorting logic: primary sort by frequency (ascending), secondary sort by value (descending).
Algorithm
- Count the frequency of each number using a hash map.
- Sort the array using a custom comparator that:
- Compares by frequency first (lower frequency comes first).
- If frequencies are equal, compares by
value(largervaluecomes first).
- Return the sorted array.
Time & Space Complexity
- Time complexity:
- Space complexity:
Common Pitfalls
Reversing the Tiebreaker Logic
The problem requires that when frequencies are equal, larger values should come first (descending order by value). A common mistake is sorting by ascending value instead, which produces incorrect output for elements with the same frequency.
Sorting by Frequency in Descending Order
The problem asks for increasing frequency order (less frequent elements first). Accidentally sorting by descending frequency places the most frequent elements first, which is the opposite of what is required.
Sign in to join the discussion