題目:一個二維數組,每一行都是升序排列的,但每一列並不一定是升序排列的,設計算法找出最大的N個數。
這類Top(N)算法,很容易想到堆排序,那麼建什麼堆呢?建多大的堆呢?
這個題目有個特點就是矩陣的最後一列是每一行的最大元素,那麼整個矩陣的最大元素必然也在最後一列,所以我們可以考慮將最後一列元素建一個大根堆,建好之後,堆頂就是目前最大的元素,pop出最大的元素之後,將該最大元素的所在行的前一個元素放入對頂,並調整爲大根堆,循環N次操作即可得到Top(N)個元素。
題目:一個二維數組,每一行都是升序排列的,但每一列並不一定是升序排列的,設計算法找出最大的N個數。
這類Top(N)算法,很容易想到堆排序,那麼建什麼堆呢?建多大的堆呢?
這個題目有個特點就是矩陣的最後一列是每一行的最大元素,那麼整個矩陣的最大元素必然也在最後一列,所以我們可以考慮將最後一列元素建一個大根堆,建好之後,堆頂就是目前最大的元素,pop出最大的元素之後,將該最大元素的所在行的前一個元素放入對頂,並調整爲大根堆,循環N次操作即可得到Top(N)個元素。
當一個算法包含對自身的遞歸調用時,其運行時間通常可以用遞歸式(recurrence)來表示。解遞歸式,就是找出解的漸近“Θ”或“O”界的方法,