Skip to content

347. Top K Frequent Elements

题目

Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.

 

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]

Example 2:

Input: nums = [1], k = 1
Output: [1]

 

Constraints:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • k is in the range [1, the number of unique elements in the array].
  • It is guaranteed that the answer is unique.

 

Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

Related Topics
  • 数组
  • 哈希表
  • 分治
  • 桶排序
  • 计数
  • 快速选择
  • 排序
  • 堆(优先队列)

  • 👍 2021
  • 👎 0
  • 思路

    解法

    py
    from collections import Counter, defaultdict
    
    # leetcode submit region begin(Prohibit modification and deletion)
    
    class Solution:
        def topKFrequent(self, nums: List[int], k: int) -> List[int]:
            count = Counter(nums)
            # Sort by frequency descending
            return [num for num, freq in sorted(count.items(), key=lambda x: x[1], reverse=True)[:k]]
    # leetcode submit region end(Prohibit modification and deletion)

    复杂度分析

    • 时间复杂度 O(NlogK)
      • N 数组长度
      • K 创建前 K 个的最频繁出现的元素的
    • 空间复杂度 O(U + K)
      • U counter 中独立元素的值
      • K 最常见的元素的值