用 Python 编写程序,查找频率相同的最大频繁元素的最短子列表的长度
pythonserver side programmingprogramming更新于 2026/1/3 11:56:17
假设我们有一个名为 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
- 如果 d[k] 与 mx 相同,则 vs := d 中每个 k 的 k 列表
- mn := L
- 对于 vs 中的每个 v,执行
- mn := mn 和 ((L - (rnums 中 v 的索引) - (nums 中 v 的索引)) 中的最小值
- 返回 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 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

