题目名称

给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。

请你返回排序后的数组。

示例

输入:nums = [1,1,2,2,2,3]
输出:[3,1,1,2,2,2]
解释:’3’ 频率为 1,’1’ 频率为 2,’2’ 频率为 3 。

题解

首先将数组中的数字按照频率提取出来
然后进行排序(按照频率从小到大及数字从大到小)
将最后得到的数组按照频率展开

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @param {number[]} nums
* @return {number[]}
*/
var frequencySort = function(nums) {
let hash = {}
for(let i = 0; i < nums.length; i++) {
const item = nums[i]
if(!hash[item]) {
hash[item] = 0
}
hash[item]++
}
return Object.entries(hash).sort((a, b) => b[0] - a[0]).sort((a, b) => a[1] - b[1]).reduce((total, item) => {
return total.concat(new Array(item[1]).fill(item[0]))
}, [])
};