問題描述:
給定乙個長度為n(n>=2)的無序正整數序列ary,要求同時找到其中最大和最小值元素,並返回其和。
分析:
將最大值max和最小值min看成一對(mix,min),每次從序列中成對地取出兩個元素,將其中較小者與min比較並更新,將其中較大者與max必將並更新,這樣處理每一對元素只需要3次比較,整個序列可以分成大致n/2對,比較次數約為3n/2。
實現:
publicstatic
int getsumofmaxandmin(int
ary)
else
for (; i < lenght; i+=2)
if (ary[i+1]>max)
}else
if (ary[i]>max) }}
return max+min;
}
同時找最大最小值
題目定義 給定乙個大小為n的陣列,無序,找到其中的最大值和最小值,要求元素間的比較次數盡可能少。這道題出自 演算法導論 創新工場2016校招筆試也考了這道題。以下摘自 演算法導論 事實上,我們只需要最多3 n 2 次比較就可以同時找到最小值和最大值。具體的方法是記錄已知的最大值和最小值,然後對輸入元...
同時得到最大最小值的最優演算法
首先,我們將一對輸入元素進行比較,然後把較小的值與最小值比較,較大值與最大值比較。這樣,每兩個元素共需3次比較。如果n是奇數,就把最大最小值的初值都設為第乙個元素的值,然後成對處理剩下的元素 如果n是偶數,則先比較前兩個元素,決定最大最小值的初值,然後成對處理剩下的元素。include stdafx...
最大最小值
示例一 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 ...