在Python中查找具有相同频率的最常见元素的最短子列表长度的程序

在Python中查找具有相同频率的最常见元素的最短子列表长度的程序

假设我们有一个名为nums的数字列表。如果nums中最频繁的数字的频率为k,则我们必须找到一个最短子列表的长度,使得其最频繁的项的频率也是k。

因此,如果输入如下nums = [10, 20, 30, 40, 30, 10],则输出将是3,因为此处最常出现的数字是10和30,这里k = 2。如果我们选择子列表[30、40、30],则这是其中包含30并且其频率也为2的最短子列表。

为了解决这个问题,我们将执行以下步骤 –

  • L:=nums的大小
  • rnums:= nums的反转
  • d:=包含nums中每个元素出现频率的映射
  • mx:= d所有值中的最大值
  • vs:= k的列表,其中包括d [k]与mx相同的每个k
  • mn:= L
  • 对于每个v在vs中,做如下操作:
    • mn:= mn和((L-(v在rnums中的索引) -(v在nums中的索引)))的最小值
  • 返回mn

示例

让我们查看以下实现以获得更好的理解 –

 from collections import Counter
def solve(nums):
   L = len(nums)
   rnums = nums [:: -1]

   d = Counter(nums)
   mx = max(d.values())
   vs = [k for k in d if d[k] == mx]

   mn = L
   for v in vs:
     mn = min(mn,(L-rnums.index(v)) - nums.index(v))
   return mn

nums = [10, 20, 30, 40, 30, 10]
print(solve(nums))

输入

 [10, 20, 30, 40, 30, 10]

输出

 3 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程