按Python中元素增加的频率对数组进行排序的程序
假设我们有一个具有一些元素的数组,元素可能会多次出现。我们必须按它们的频率排序,以便元素按出现较少次数的顺序出现,依此类推。
所以,如果输入是nums = [1,5,3,1,3,1,2,5],那么输出将是[2, 5, 5, 3, 3, 1, 1, 1]
要解决此问题,我们将遵循以下步骤−
- mp:一个新的映射
-
对于nums中的每个不同元素i,做以下操作
- x:nums中i的数量
-
如果x存在于mp中,则
- 在mp[x]的末尾插入i
- 否则,mp[x]:仅具有一个元素i的列表
-
ans:一个新的列表
-
按键对mp进行排序的每个i,做以下操作
- 对于反向排序的mp[i]列表中的每个j,做以下操作
- 将j,i的数量插入到ans中
- 对于反向排序的mp[i]列表中的每个j,做以下操作
- 返回ans
示例(Python)
让我们看一下以下实现,以获得更好的理解−
def solve(nums):
mp = {}
for i in set(nums):
x=nums.count(i)
try:
mp[x].append(i)
except:
mp[x]=[i]
ans=[]
for i in sorted(mp):
for j in sorted(mp[i], reverse=True):
ans.extend([j]*i)
return ans
nums = [1,5,3,1,3,1,2,5]
print(solve(nums))
输入
[1,5,3,1,3,1,2,5]
输出
[2, 5, 5, 3, 3, 1, 1, 1]