1.题目描述
给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。
请你返回排序后的数组。
示例 1:
示例 2:
示例 3:
提示:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
2.思路
使用哈希表保存数组每个元素的频次,然后根据频次升序排序,如果频次一样就根据元素值降序排序。
3.代码
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
unordered_map<int, int> cnt;
for(auto &num : nums){
cnt[num] ++;
}
sort(nums.begin(), nums.end(), [&cnt](int a, int b){
return cnt[a] == cnt[b] ? a > b : cnt[a] < cnt[b];
});
return nums;
}
};
4.复杂度分析
时间复杂度:O(nlogn)
空间复杂度:O(n)