LeetCode 347.Top K Frequent Elements 题解边界用例失败问题咨询
前K个高频元素代码调试方案
问题背景
- 基于列表+字典结构实现前K个高频元素题目求解
- 初始代码可通过部分测试用例,但受参数k取值、边界逻辑漏洞影响,无法覆盖全部测试场景
初始错误代码
from typing import List class Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: d={} for each in range(len(nums)): if nums[each] not in d: d[nums[each]]=0 d[nums[each]]+=1 res=[] if len(d)==k: return nums l=sorted(d.values(),reverse=True) for i in range(k): for k,v in d.items(): if l[i]==v: res.append(k) return res
初始代码存在的核心漏洞
- 边界判断逻辑错误:当去重后元素总数等于k时,错误返回了带重复值的原数组
nums,题目要求返回的是去重后的k个高频元素,原数组返回会导致结果长度、内容不符合要求 - 变量名冲突:内层遍历字典的循环使用
k作为键的临时变量名,覆盖了方法传入的参数k,会引发循环逻辑异常 - 结果匹配逻辑缺陷:单独排序频率值后二次遍历字典匹配对应键,没有对已加入结果的元素做去重标记,当多个元素频率相同时,会出现重复添加同一元素、漏加符合要求元素的问题
修正后全场景兼容代码
from typing import List class Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: freq_dict = {} # 统计各元素出现频率 for num in nums: freq_dict[num] = freq_dict.get(num, 0) + 1 # 边界场景:去重后元素数刚好等于k,直接返回所有去重元素 if len(freq_dict) == k: return list(freq_dict.keys()) # 直接按频率降序排序键值对,避免二次匹配的逻辑漏洞 sorted_freq = sorted(freq_dict.items(), key=lambda x: x[1], reverse=True) # 切片取前k个元素的键作为结果 return [item[0] for item in sorted_freq[:k]]
覆盖的边界场景
- 数组元素全为同一值的场景
- k取值为1、k取值等于数组去重后总长度的极端场景
- 多个元素出现频率完全相同的场景
- 数组所有元素均唯一的场景
内容的提问来源于stack exchange,提问作者Spurthy Mutturaj
相关产品推荐
相关产品推荐

