347. Top K Frequent Elements

Top K Frequent Elements

原題介紹

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

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

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.
Subscribe to see which companies asked this question

給出一個非空整數列表,返回出現頻次最大的k個元素

解題思路

O(n)

  1. hash,得到<元素,頻次>鍵值對
  2. 因爲頻次小於n,建散列表,即新建大小爲n+1的數組,數組下標爲頻次,數組內容爲有相同頻次的鍵值list,對散列表按下標由大到小遍歷,找出k個鍵值

ref:https://leetcode.com/discuss/100581/java-o-n-solution-bucket-sort

O(n*log(n-k))

  1. hash map
  2. 新建大小爲n-k的最大堆,遍歷<元素, 頻次>,頻次大於堆頂的保存到返回列表,頻次小於堆頂的入堆,最後最小堆保存的是出現頻次最低的n-k個,被“捨棄”的元素則是出現頻次最大的k個

ref:https://leetcode.com/discuss/100562/o-log-k-unordered_map-and-priority_queue-maxheap-solution

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章