前K个高频元素(top k)(TX)
生活随笔
收集整理的這篇文章主要介紹了
前K个高频元素(top k)(TX)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路
這道題目主要涉及到如下三塊內容:
1、要統計元素出現頻率
2、對頻率排序
3、找出前K個高頻元素
首先統計元素出現的頻率,這一類的問題可以使用map來進行統計。
然后是對頻率進行排序,這里我們可以使用一種 容器適配器就是「優先級隊列」
為什么不用快排呢, 使用快排要將map轉換為vector的結構,然后對整個數組進行排序, 而這種場景下,我們其實只需要維護k個有序的序列就可以了,所以使用優先級隊列是最優的。
此時要思考一下,是使用小頂堆呢,還是大頂堆?
有的同學一想,題目要求前 K 個高頻元素,那么果斷用大頂堆啊。
那么問題來了,定義一個大小為k的大頂堆,在每次移動更新大頂堆的時候,每次彈出都把最大的元素彈出去了,那么怎么保留下來前K個高頻元素呢。
「所以我們要用小頂堆,因為要統計最大前k個元素,只有小頂堆每次將最小的元素彈出,最后小頂堆里積累的才是前k個最大元素。」
尋找前k個最大元素流程如圖所示:(圖中的頻率只有三個,所以正好構成一個大小為3的小頂堆,如果頻率更多一些,則用這個小頂堆進行掃描)
總結
以上是生活随笔為你收集整理的前K个高频元素(top k)(TX)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 滑动窗口最大值--单调队列
- 下一篇: 输出字母沙漏+对称字符串