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(nlogn), where n is the array's size.

Thoughts:

  1. Bucket sort:

  2. MaxHeap Implementation (BUT O(nlogn))

  3. TreeMap: Use freq as the key so can get freq in order

Code

class Solution(object):
    def topKFrequent(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        m = [0] * (len(nums) + 1)
        cnt = collections.Counter(nums)
        for i in range(len(m)):
            m[i] = []

        for v in cnt:
            m[cnt[v]].append(v)
        res = []
        for l in (m[::-1]):
            res += l
            if len(res) >= k: break
        return res

Code:

Code: max heap T:O(nlogn); S:O(n)

Code: Java TreeMap: T:O(nlogn); S:O(n)

Code: Python having fun...

Last updated

Was this helpful?