1636. Sort Array by Increasing Frequency - Explanation

Problem Link

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

Company Tags

Please upgrade to NeetCode Pro to view company tags.



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

  1. Count the frequency of each number using a hash map.
  2. Sort the array using a custom comparator that:
    • Compares by frequency first (lower frequency comes first).
    • If frequencies are equal, compares by value (larger value comes first).
  3. Return the sorted array.
class Solution:
    def frequencySort(self, nums: List[int]) -> List[int]:
        count = Counter(nums)
        nums.sort(key=lambda n: (count[n], -n))
        return nums

Time & Space Complexity

  • Time complexity: O(nlogn)O(n \log n)
  • Space complexity: O(n)O(n)

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.