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] <= 100To 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?