同時找最大最小值

2022-01-22 18:16:23 字數 682 閱讀 3060

題目定義:

給定乙個大小為n的陣列,無序,找到其中的最大值和最小值,要求元素間的比較次數盡可能少。

這道題出自《演算法導論》。創新工場2016校招筆試也考了這道題。

以下摘自《演算法導論》:

事實上,我們只需要最多3⌊n/2⌋次比較就可以同時找到最小值和最大值。具體的方法是記錄已知的最大值和最小值,然後對輸入元素成對地進行處理。首先,我們將一對輸入元素相互進行比較,然後把較小的與當前最小值進行比較,把較大的與當前最大值進行比較。這樣,對每兩個元素共需3次比較。

如何設定已知的最小值和最大值的初始值依賴於n是奇數還是偶數。如果n是奇數,我們就將最小值和最大值的初值都設為第乙個元素的值,然後成對地處理餘下的元素。如果n是偶數,就對前兩個元素做一次比較,以決定最小值和最大值的初值,然後與n是奇數的情形一樣,成對地處理餘下的元素。

貼一下我的**:

int

min;

intmax;

void findminmax(int arr, int n, int &min, int &max)

else

else

begin = 2

; }

for (int i = begin; i < n-1; i = i+2

)

else

}}

Python實現同時找最大最小值(優化版本)

如下 coding utf 8 其中假設n是奇數 如果n是偶數的話,把li 0 li 1 先比較,分別初始為最小最大值。def minmaximum li 本函式的功能是找到列表li中的最大值和最小值 min li 0 max li 0 for i in range 1,len li 2 if li...

同時尋找序列的最大最小值

問題描述 給定乙個長度為n n 2 的無序正整數序列ary,要求同時找到其中最大和最小值元素,並返回其和。分析 將最大值max和最小值min看成一對 mix,min 每次從序列中成對地取出兩個元素,將其中較小者與min比較並更新,將其中較大者與max必將並更新,這樣處理每一對元素只需要3次比較,整個...

最大最小值

示例一 maximum lambda x,y x y x x y y 注意 x y 返回的是0或者1 minimum lambda x,y x y y x y x a 10 b 20 print the largar one is d maximum a,b print the lower one ...