面試題[堆排序]: 二維數組的Top(N)

題目:一個二維數組,每一行都是升序排列的,但每一列並不一定是升序排列的,設計算法找出最大的N個數。

這類Top(N)算法,很容易想到堆排序,那麼建什麼堆呢?建多大的堆呢?

這個題目有個特點就是矩陣的最後一列是每一行的最大元素,那麼整個矩陣的最大元素必然也在最後一列,所以我們可以考慮將最後一列元素建一個大根堆,建好之後,堆頂就是目前最大的元素,pop出最大的元素之後,將該最大元素的所在行的前一個元素放入對頂,並調整爲大根堆,循環N次操作即可得到Top(N)個元素。

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