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

修改TopKFrequentElements代码以处理元素频率重复的场景

解决方案

修改后的代码如下:

from collections import defaultdict

class Solution:
    def topKFrequent(self, nums: list[int], k: int) -> list:
        # 统计每个元素的出现频率
        count = {}
        for n in nums:
            count[n] = 1 + count.get(n, 0)
        
        # 构建频率到元素列表的映射
        freq_dict = defaultdict(list)
        for num, freq in count.items():
            freq_dict[freq].append(num)
        
        # 将频率从高到低排序
        sorted_freqs = sorted(freq_dict.keys(), reverse=True)
        
        res = []
        current_count = 0
        for freq in sorted_freqs:
            elements = freq_dict[freq]
            # 根据元素数量决定添加单个元素还是列表
            if len(elements) == 1:
                res.append(elements[0])
            else:
                res.append(elements)
            current_count += 1
            # 达到k个分组时停止
            if current_count == k:
                break
        
        return res

sol = Solution()
nums = [1,1,1,2,2,3,3,4]
k = 2
print(sol.topKFrequent(nums, k))  # 输出: [1, [2, 3]]

# 测试无重复频率的情况
nums2 = [1,1,1,2,2,3]
k2 = 3
print(sol.topKFrequent(nums2, k2))  # 输出: [1, 2, 3]

关键修改说明

  1. 频率到元素的映射:用defaultdict把相同频率的元素归类到一起,替代原代码中按索引存储的freq列表,更直观处理同频率元素。
  2. 按频率降序遍历:将所有频率值从高到低排序,确保优先处理高频元素组。
  3. 分组计数逻辑:不再逐个统计元素,而是统计频率组的数量。每处理一个频率组(不管组内元素数量),计数加1,直到达到k个分组时停止。
  4. 结果格式处理:如果组内只有一个元素,直接添加元素本身;如果有多个元素,添加整个列表,满足题目要求的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:22:46