2026-10-22 14:09:07
要解决“前K个高频元素”问题且不使用内置库,可以采用桶排序(Bucket Sort)的变种方法。以下是详细步骤和代码实现:
方法思路这种方法利用了桶排序的思想,通过频率作为索引来组织数据,避免了直接对字典进行排序,从而提高了效率。
解决代码class Solution(object): def topKFrequent(self, nums, k): """ :type nums: List[int] :type k: int :rtype: List[int] """ # 统计每个数字的频率 frequency_map = {} for num in nums: if num in frequency_map: frequency_map[num] += 1 else: frequency_map[num] = 1 # 创建桶,索引为频率,值为该频率的数字列表 max_freq = max(frequency_map.values()) if frequency_map else 0 buckets = [[] for _ in range(max_freq + 1)] for num, freq in frequency_map.items(): buckets[freq].append(num) # 从高频率到低频率收集数字 result = [] for i in range(len(buckets) - 1, 0, -1): for num in buckets[i]: result.append(num) if len(result) == k: return result return result代码解释这种方法避免了直接使用内置的排序函数,通过桶排序的思想高效地解决了问题,时间复杂度主要取决于统计频率和遍历桶的过程,整体为O(n),其中n是数组nums的长度。