使用堆在下面的算法工作:紅寶石算法
鑑於整數的非空數組,返回k個最頻繁的 元素。
例如,給定[1,1,1,2,2,3]和k = 2,返回[1,2]。
注意:您可以假定k總是有效的,1≤k≤獨特的 元素的數量。算法的時間複雜度必須優於O(n log n),其中n是數組的大小。
我最初的衝動是使用散列表作爲關鍵字的數字和作爲出現次數的值。然後,我可以將每個鍵值對作爲一個節點插入到maxHeap中,並簡單地刪除max直到k == 0.
構建節點並將輸入到maxHeap中的方法解決方法是? 注意:我對一個更優化的解決方案並不好奇 - 對於我是否實現了使用maxHeap重複查找具有最大出現次數的數字的想法感到好奇。節點部分似乎過度殺傷,但我不知道該怎麼做。
這聽起來對我來說就像是正確的做法。基本上你的問題歸結爲「在數組中找到k個最大的元素」,通常通過快速選擇(但是這是O(n^2)最壞的情況)或通過使用堆來解決。 – avysk