LeetCode前K个高频元素问题:哈希表统计频率出错求助
错误原因分析
你的代码核心错误在于遍历数组时混淆了元素值和数组索引:
- 当执行
for x in nums时,x本身就是数组中的元素(比如第一次循环x是1,第二次还是1,以此类推),但你在判断和更新哈希表时,错误地使用了nums[x]——这是把x当成数组的索引去取值,而非直接用x作为哈希表的键。 - 举个实际执行的例子:第一次循环x=1,
nums[x]即nums[1],值为1;第二次x=1,nums[x]还是1;第三次x=1,依旧是1;第四次x=2,nums[2]是1;第五次x=2,nums[2]是1;第六次x=3,nums[3]是2。这就导致你统计的是nums[x]这个值的出现次数,而非原数组元素x的次数,最终得到错误结果。
修正后的代码
把所有nums[x]替换成x即可得到正确统计结果:
nums = [1,1,1,2,2,3] iterations = {} for x in nums: if x in iterations: iterations[x] += 1 else: iterations[x] = 1 print(iterations) # 输出: {1: 3, 2: 2, 3: 1}
另外,Python里可以用更简洁的写法实现计数逻辑:
- 用
collections.defaultdict简化初始化:
from collections import defaultdict nums = [1,1,1,2,2,3] iterations = defaultdict(int) for x in nums: iterations[x] += 1 print(dict(iterations))
- 不用额外模块的写法:
nums = [1,1,1,2,2,3] iterations = {} for x in nums: iterations[x] = iterations.get(x, 0) + 1 print(iterations)
内容的提问来源于stack exchange,提问作者TheOdinBorson
相关产品推荐
相关产品推荐

