LC 1636. 按照频率将数组升序排序 (opens new window) (opens new window)
简单
# 问题描述
给你一个整数数组 nums
,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。
请你返回排序后的数组。
示例 1:
输入:nums = [1,1,2,2,2,3]
输出:[3,1,1,2,2,2]
解释:'3' 频率为 1,'1' 频率为 2,'2' 频率为 3 。
示例 2:
输入:nums = [2,3,1,3,2]
输出:[1,3,3,2,2]
解释:'2' 和 '3' 频率都为 2 ,所以它们之间按照数值本身降序排序。
示例 3:
输入:nums = [-1,1,-6,4,5,-6,1,4,1]
输出:[5,-1,4,4,-6,-6,1,1,1]
提示:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
# 排序
使用一个数组记录各个数字出现的频率,然后按照频率对数组进行排序,若频率相同,则降序排序。
/**
* @param {number[]} nums
* @return {number[]}
*/
var frequencySort = function (nums) {
const n = nums.length
const cnt = new Array(210).fill(0)
for (let i = 0; i < n; i++) cnt[nums[i] + 100]++
return nums.sort((a, b) => cnt[a + 100] - cnt[b + 100] || b - a)
}
- 时间复杂度:,排序所需时间复杂度
- 空间复杂度:, 为数字的取值范围
上次更新: 2023/01/31 19:48:05
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!