-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path1636_Sort_Array_by_Increasing_Frequency.cpp
More file actions
53 lines (40 loc) · 1.33 KB
/
Copy path1636_Sort_Array_by_Increasing_Frequency.cpp
File metadata and controls
53 lines (40 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
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.
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.
Example 3:
Input: nums = [-1,1,-6,4,5,-6,1,4,1]
Output: [5,-1,4,4,-6,-6,1,1,1]
Constraints:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
*/
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
unordered_map<int, int> freq;
for (int num : nums) {
freq[num]++;
}
sort(nums.begin(), nums.end(), [&](int n1, int n2) {
if (freq[n1] != freq[n2]) {
// if freq of numbers are not equal then return in increasing
// order based on freq.
return freq[n1] < freq[n2];
} else {
// otherwise sort them in decreasing order based on number in
// nums.
return n2 < n1;
}
});
return nums;
}
};