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 := 对于d中的每个k,如果d[k]与mx相同,则创建一个k的列表
  • mn := L
  • 对于vs中的每个v,执行:
    • 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

更新于:2021年10月14日

169 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告