题目描述
给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。
请你返回排序后的数组。
示例 1:
输入:nums = [1,1,2,2,2,3] 输出:[3,1,1,2,2,2] 解释:'3' 频率为 1,'1' 频率为 2,'2' 频率为 3 。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/so… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
map存一下,value相同的按value排序,题目比较简单,重点是介绍go的slice.sort 语法, 这里的 func(i,j) 相当于重写了less 方法
解法
func frequencySort(nums []int) []int {
cnt := map[int]int{}
for _, x := range nums {
cnt[x]++
}
sort.Slice(nums, func(i, j int) bool {
a, b := nums[i], nums[j]
return cnt[a] < cnt[b] || cnt[a] == cnt[b] && a > b
})
return nums
}