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:
Bucket sort:
MaxHeap Implementation (BUT O(nlogn))
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 resCode:
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?