1636. 按照頻率將數(shù)組升序排序
給你一個(gè)整數(shù)數(shù)組 nums ,請你將數(shù)組按照每個(gè)值的頻率 升序 排序劝贸。如果有多個(gè)值的頻率相同,請你按照數(shù)值本身將它們 降序 排序。
請你返回排序后的數(shù)組绒北。
輸入:nums = [1,1,2,2,2,3]
輸出:[3,1,1,2,2,2]
解釋:'3' 頻率為 1傻盟,'1' 頻率為 2愕掏,'2' 頻率為 3 。
- 方法1:lambda匿名函數(shù)直接排序
class Solution:
def frequencySort(self, nums: List[int]) -> List[int]:
# 先算出數(shù)組 \textit{nums}nums 中各元素的頻率
cnt = Counter(nums)
# 然后按照元素頻率和數(shù)值對數(shù)組進(jìn)行排序
nums.sort(key=lambda x: (cnt[x], -x))
return nums
- 方法2:哈希表+排序
class Solution:
def frequencySort(self, nums: List[int]) -> List[int]:
# 先將數(shù)值由大到小排序(降序)
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