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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:57:26