LeetCode每日一题-字典排序

1636. 按照频率将数组升序排序

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

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

  • 方法1:lambda匿名函数直接排序
class Solution:
    def frequencySort(self, nums: List[int]) -> List[int]:
        # 先算出数组 \textit{nums}nums 中各元素的频率
        cnt = Counter(nums)
        # 然后按照元素频率和数值对数组进行排序
        nums.sort(key=lambda x: (cnt[x], -x))
        return nums
  • 方法2:哈希表+排序
class Solution:
    def frequencySort(self, nums: List[int]) -> List[int]:
        # 先将数值由大到小排序(降序)
        nums.sort(reverse = True)
        hashmap = {}
        maxcount = 0
        for num in nums:
            if num in hashmap:
                hashmap[num] += 1
            else:
                hashmap[num] = 1
            maxcount = max(maxcount, hashmap[num])
        # 频率升序排序
        count = 0
        res = []
        while count <= maxcount:
            for index in hashmap:
                if hashmap[index] == count:
                    res += [index]*count
            # 频率递增
            count += 1
        return res

你可能感兴趣的:(LeetCode每日一题-字典排序)