python力扣刷题记录——1636. 按照频率将数组升序排序

题目:

给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。
请你返回排序后的数组。
python力扣刷题记录——1636. 按照频率将数组升序排序_第1张图片

方法一:
执行用时: 32 ms
内存消耗: 13.5 MB

以字典dict_nums来记录列表中的数字和出现的个数(key:num, value:count)。再采用list()序列化字典,转为[(num, count),(num, count), …]的形式
sort()排序,先按照value排序,value值相同再按照key排序

class Solution:
    def frequencySort(self, nums: List[int]) -> List[int]:
        dict_nums = {
     }
        for i in nums:
            if i not in dict_nums:
                dict_nums[i] = 1
            else:
                dict_nums[i] += 1

        list1 = list(dict_nums.items())
        list1.sort(key=lambda x:(x[1], -x[0]))
        new_nums = []
        for i in list1:
            new_nums += [i[0]]*i[1]
        return new_nums

方法二:
执行用时: 44 ms
内存消耗: 13.4 MB

力扣上的大佬一句代码搞定

class Solution:
    def frequencySort(self, nums: List[int]) -> List[int]:
        return sorted(nums, key=lambda n: (nums.count(n), -n))

补充:
sort()和sorted()区别
sort()
sort ()是应用在 list 上的方法, 无返回值;直接修改原对象

a = [4,3,7,8]
a.sort()
print(a)  #   [3, 4, 7, 8]

sorted()
sorted 作用于可迭代的对象(iterable);返回的是一个新的 list,而不是在原来的基础上进行的操作

a = [4,3,7,8]
b = sorted(a)
print(b)    # [3, 4, 7, 8]   生产新列表
print(a)    # [4, 3, 7, 8]  原列表布标

你可能感兴趣的:(数据结构与算法,leetcode)