Leetcode 347. Top K Frequent Elements

问题描述

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

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

Example 2:

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

Note:

  • You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
  • Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

解题思路

统计每个元素出现的次数。按次数排序取前k个。

1
2
3
4
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
d = collections.Counter(nums)
return sorted(d.keys(), key=lambda x:d[x], reverse=True)[:k]

进阶

使用堆取前k大的元素

1
2
3
4
5
6
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
l = [(-counts, elem) for elem, counts in collections.Counter(nums).items()]
heapq.heapify(l)
return [heapq.heappop(l)[1] for i in range(k)]