您的位置:首页 > 其它

leetcode_347. 前 K 个高频元素

2020-09-07 10:00 190 查看

目录

一、题目要求

二、解题思路

三、代码

一、题目要求

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

示例 1:

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

示例 2:

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

 

提示:

你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。
你可以按任意顺序返回答案。

二、解题思路

1.用dict存储数字对应的个数

2.按照value即出现次数排序

3.用list存储排序之后的dict的key值

4.取list中前k个数

三、代码

[code]class Solution:
def topKFrequent(self, nums, k: int):
res = []
num_count_dict = {}
for num in nums:
if num in num_count_dict:
num_count_dict[num] += 1
else:
num_count_dict[num] = 1
sorted_num_count_dict = sorted(num_count_dict.items(),
key=lambda x: x[1],
reverse=True)
for (num, count) in sorted_num_count_dict:
res.append(num)
if k <= len(res):
return res[:k]
else:
return res

if __name__ == '__main__':
nums = [1,1,1,2,2,3]
k = 2

s = Solution()
ans = s.topKFrequent(nums, k)
print(ans)
悲恋花丶无心之人 CSDN认证博客专家 TensorFlow 深度学习 神经网络 计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: