修改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]
关键修改说明
- 频率到元素的映射:用
defaultdict把相同频率的元素归类到一起,替代原代码中按索引存储的freq列表,更直观处理同频率元素。 - 按频率降序遍历:将所有频率值从高到低排序,确保优先处理高频元素组。
- 分组计数逻辑:不再逐个统计元素,而是统计频率组的数量。每处理一个频率组(不管组内元素数量),计数加1,直到达到
k个分组时停止。 - 结果格式处理:如果组内只有一个元素,直接添加元素本身;如果有多个元素,添加整个列表,满足题目要求的输出格式。
内容的提问来源于stack exchange,提问作者kontttts
相关产品推荐
相关产品推荐

