You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于字典值提取键并解决LeetCode前K高频元素问题

解决LeetCode前K个高频元素问题及代码错误修复

先解决你遇到的TypeError错误

你代码里的for key, value in nums_hash:这行有问题——直接遍历字典时,默认只会迭代它的键,每次循环拿到的是单个整数(比如1、2、3),你却试图把它拆成key和value两个变量,自然会报cannot unpack non-iterable int object。

要遍历字典的键值对,必须调用items()方法,改成:

for key, value in nums_hash.items():

再修正你的逻辑(题目理解偏差)

你当前的逻辑是找频率≥k的元素,但题目要求的是出现频率前k高的元素。比如示例输入[1,1,1,2,2,3],k=2,要返回的是出现次数最多的前2个元素(1和2),而不是所有出现次数≥2的元素(虽然结果碰巧一样,但换个测试用例逻辑就会出错)。

正确的做法是:

  1. 统计完频率字典后,把键值对按频率降序排序
  2. 取排序后的前k个键

修正后的完整代码

def most(nums, k):
    nums_hash = {}
    nums_list = []
    
    # 统计频率(这部分你写的是对的)
    for number in nums:
        if number in nums_hash:
            nums_hash[number] += 1
        else:
            nums_hash[number] = 1
    
    # 按频率降序排序键值对,取前k个键
    sorted_items = sorted(nums_hash.items(), key=lambda x: x[1], reverse=True)
    nums_list = [item[0] for item in sorted_items[:k]]
    
    return nums_list

print(most([1,1,1,2,2,3], k=2))  # 输出 [1,2]

额外优化:用collections.Counter简化统计

Python的collections.Counter可以直接帮你统计频率,不用自己写循环:

from collections import Counter

def most(nums, k):
    # Counter直接统计频率,most_common(k)返回前k个高频元素的元组列表
    return [item[0] for item in Counter(nums).most_common(k)]

print(most([1,1,1,2,2,3], k=2))  # 输出 [1,2]

内容的提问来源于stack exchange,提问作者user22248976

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:12:50