Leetcode 1636. Sort Array by Increasing Frequency
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.
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.
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 based on the decreasing order.
Input: nums = [-1,1,-6,4,5,-6,1,4,1]
Output: [5,-1,4,4,-6,-6,1,1,1]
1 <= nums.length <= 100
-100 <= nums[i] <= 100
To solve this problem, we can:
Here’s the C++ implementation:
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
// Step 1: Count frequencies
unordered_map<int, int> frequencyMap;
for (int num : nums) {
frequencyMap[num]++;
}
// Step 2: Sort with custom comparator
sort(nums.begin(), nums.end(), [&frequencyMap](int a, int b) {
if (frequencyMap[a] == frequencyMap[b])
return a > b;
return frequencyMap[a] < frequencyMap[b];
});
return nums;
}
};
unordered_map
.std::sort
with a lambda function as the custom comparator.
O(N)
, where N
is the number of elements in the array.O(N log N)
due to the complexity of std::sort
.O(N log N)
.This solution is efficient given the constraints, and the use of unordered_map
ensures that the frequency counting is optimal.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?