八十四、堆排序解决TopK问题
生活随笔
收集整理的這篇文章主要介紹了
八十四、堆排序解决TopK问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@Author:Runsen
上次介紹了堆排序,這次介紹堆排序常見的應用場景TopK問題和。
利用堆求TopK問題
TopK問題是一個堆排序典型的應用場景。
題目是這樣的:假設,我們想在大量的數據,如 100 億個整型數據中,找到值最大的 K 個元素,K 小于 10000。對此,你會怎么做呢?
對標的是Leetcode第215題:數組中的第K個最大元素。
具體鏈接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。
示例 1:輸入: [3,2,1,5,6,4] 和 k = 2 輸出: 5 示例 2:輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4 輸出: 4經典的TopK問題還有:最大(小) K 個數、前 K 個高頻元素、第 K 個最大(小)元素
對此TopK問題本質上是一個排序問題,排序算法一共有十個,這個還有很多排序算法沒有介紹過。
至于為什么TopK問題最佳的答案是堆排序?其實在空間和時間的復雜度來考量,雖說快排是最好的排序算法,但是對于100億個元素從大到小排序,然后輸出前 K 個元素值。
可是&#x
總結
以上是生活随笔為你收集整理的八十四、堆排序解决TopK问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 很喜欢新中式的装修风格,但是担心会看上去
- 下一篇: 八十六、从拓扑排序探究有向图