📌  相关文章
📜  国际空间研究组织 | ISRO CS 2016 |问题 48(1)

📅  最后修改于: 2023-12-03 15:37:15.477000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2016 | 问题 48

题目描述

给定一个包含整数的列表和一个名为 k 的整数,编写一个函数来找到这个列表中前 k 个最常见的元素。

示例
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
解题思路

首先,我们需要统计列表中每个元素出现的次数,可以使用 python 中的 Counter 类来完成。接下来,我们按照元素出现的次数从大到小排列,然后返回前 k 个元素即可。

from typing import List
from collections import Counter

def top_k_frequent(nums: List[int], k: int) -> List[int]:
    count = Counter(nums)
    return [x[0] for x in count.most_common(k)]
复杂度分析

该算法遍历列表一次以计算出现次数,其时间复杂度为 O(n)。对出现次数进行排序的时间复杂度为 O(n log n),因此总的时间复杂度为 O(n log n)。空间复杂度取决于存储出现次数的字典,为 O(n)。

总结

本题使用了 python 中的 Counter 类帮助我们统计元素出现的次数,然后排序返回前 k 个元素。该算法的时间复杂度为 O(n log n),空间复杂度为 O(n)。