最大值和次大值問題的最優演算法

2021-09-30 03:40:45 字數 529 閱讀 2034

輸入

n個數,最壞情況下用 n + logn - 2

次比較找出當中的最大值和次大值。

解題思想:根據題意出現

logn

,則肯定用到二分或者堆的思路,但是輸入的數沒有經過排序,而且題目要求的計算量也不允許排序。這樣,就肯定會用到類似堆的思路,但是直接構造堆等同於排序。堆的思想跟競標賽類似,都是父節點

>=

(<=

)子節點。如果父節點都是從子節點而來,這樣就是競標賽;如果不是,這樣就是堆。既然不能排序又不能構造堆,那就只能用競標賽的思想,通過最多

n-1次比賽,得到最大值,然後沿著最大值的方向,尋找次大值。因為,只有真正實力的冠軍才能擊敗真正實力的亞軍。(其實有實力拿亞軍的隊伍可能首輪就遭遇有實力拿冠軍的隊伍,結果出師未捷。比賽的時候如果冠軍產生了,其他被冠軍擊敗的隊伍能再進行一次淘汰賽決出亞軍,這樣會排除概率的影響,顯得更加公平!)

請看**:

評語:這道題僅僅給出比較次數的限制,沒有給出演算法的複雜度要求,這樣的題目,任意的複雜度都行,只要滿足比較的次數符合要求即可。

計算最大次大值的最優演算法

求最大,次大值,比較次數為 n log n 2 n 1 為求最大值的代價,log n 1 為求次大值的代價。public class submaxandmaxefficient void heapfindmax int e,int n 找最大值,放到array 1 for last 2 n 2 la...

求出陣列的最大值和次大值

求陣列的最大值相對來說是比較簡單,只需要遍歷一遍陣列,不斷更新陣列的最大值,直到遍歷完成。自然語言描述 1.初始化最大值的角標 2.遍歷陣列,比較當前的最大值角標的元素和遍歷得到陣列元素的大小 如果陣列元素大於當前最大值,更新最大值角標為遍歷到的陣列元素角標,直到遍歷完成程式語言描述 int get...

找出陣列中的最大值和次大值

給定乙個含有n個元素的整型陣列,求其最大值和次大值 思想和上一題類似,同樣是用分治法,先求出左邊的最大值leftmax和次大值leftsecond,再求出右邊的最大值rightmax和次大值rightsecond,然後合併,如何合併呢?分情況考慮 1 如果leftmax rightmax,那麼可以肯...