题目:
给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。
请你返回排序后的数组。
方法一:
执行用时: 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] 原列表布标