欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 【leetcode100】前K个高频元素

【leetcode100】前K个高频元素

2025/4/17 0:09:38 来源:https://blog.csdn.net/qq_65509025/article/details/147000593  浏览:    关键词:【leetcode100】前K个高频元素

1、题目描述

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

2、初始思路

2.1 思路

全排列,首先使用字典存储每个数字出现的次数,然后对字典按照出现次数进行排序后输出。

2.2 完整代码

class Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:dic = {}for num in nums:if num in dic.keys():dic[num] += 1else:dic[num] = 1#print(dic)dic = sorted(dic.items(), key = lambda x:x[1], reverse = True)#print(dic)ans = []for i in range(k):ans.append(dic[i][0])return ans

2.3 注意点!

(1)时间复杂度为O(nlog n),不满足题目中要求你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。

(2)对字典存储数字出现次数掌握不熟练,可以简化代码:

dic = Counter(nums)

3 优化算法1

3.1 思路

使用堆的前K个元素的思路进行求解,时间复杂度为O(nlog k)。

3.2 代码

class Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:heap = []dic = Counter(nums)for num, count in dic.items():heapq.heappush(heap, (count, num))if len(heap) > k:heapq.heappop(heap)return [heap[i][1] for i in range(len(heap))]

 3.3 补充知识

为更好地使用堆,本文对堆进行了整理,具体如下:

 

4 优化算法2

4.1 思路

使用heapq的函数heapq.nlargerst,时间复杂度为O(nlog k)。

4.2 代码

class Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:dic = Counter(nums)res = heapq.nlargest(k, dic.items(), key = lambda x:x[1])return [res[i][0] for i in range(k)]

 4.3 补充知识

heapq.nlargest(n, iterable) 用于从可迭代对象(如列表、元组等)中提取 前 n 个最大元素,返回一个包含这些元素的列表(按从大到小排列)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词