本题要求我们对数组排序,但是排序的规则有两个:
- 数组中出现次数少的数要排在出现次数多的数后面
- 如果两数出现次数相同,则按照降序排序
为了记录每个数字的出现次数,我们需要建立一个数字与出现次数的映射
在 js 中,我们选用 Map 这个数据结构
统计完了出现次数之后,我们只需要按照题目的要求自定义排序方法就好,详见代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var frequencySort = function(nums) {
const map = new Map();
// 建立映射
for(const num of nums) {
if(map.has(num)) {
map.set(num, map.get(num) + 1)
} else {
map.set(num, 1)
}
}
// 自定义排序规则:先按照出现次数升序;如果出现次数相同则降序排列
return nums.sort((a, b) => map.get(a) - map.get(b) || b-a)
};