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 中,则

      • 将 i 插入到 mp[x] 的末尾

    • 否则 mp[x] := 一个仅包含一个元素 i 的列表

  • ans:= 一个新的列表

  • 对于按键排序的每个 i 在 mp 中,执行以下操作:

    • 对于按反序排序的每个 j 在列表 mp[i] 中,执行以下操作:

      • 将 j 插入到 ans 中 i 次

  • 返回 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]

更新于: 2021年5月17日

2K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告