最大值與最小值問題

問題描述:尋找數組中的最大值與最小值。

分析:這個問題實際中用的非常多,需要我們好好研究下。我在之前的博客中曾提到過一個線性時間選擇算法用來求解TopK問題,同樣的這個也可以使用那個算法,實際就是TOP1和TopN,但是由於問題的特殊性,但由於那個算法編程比較複雜,

我們可以採用更加簡單的方法。這裏我提供幾種解法供大家參考。

解法一:線性掃描法。設置兩個變量max和min用來保存最大值和最小值,開始時將第一個元素賦值給max和min,然後依次和後面的進行比較即可。這應該是最簡單的方法了,大家應該都用的這種方法最多,但是這種方法,當數組很大的時候比較次數過多,

           需要比較2n次。好處是查詢後原數組位置不變。

解法二:分組法。我們可以將這個數組每兩個分爲一組,爲了方便起見,把相鄰的兩個分爲一組,然後針對每組進行比較,大數放在偶數下標處,小數放在奇數下標處,這需要比較n/2次,然後再設兩個標誌量max和min,對於每組在進行比較,這樣需要比較

        2*(n/2)次,所以該方法一共需要比較1.5n次。尤其在數據量很大的時候,該方法減少的比較次數越多。但是該方法破壞了原來數據的順序。

解法三:在解法二的基礎上進行改進,設置兩個標誌量max和min,針對每一組比較完後,直接把對應的數放到min和max中,這樣就不需要交換次序了。整個的比較次數也爲1.5n次。

總結:具體使用哪種方法,應該根據具體的環境去選擇,各有利弊。

發佈了70 篇原創文章 · 獲贊 17 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章