【每日一题】 1636-按照频率将数组升序排序

56 阅读1分钟

题目描述


给你一个整数数组 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

}