我一直在考慮這個作業問題。給定一個大小爲n的數組,設計一個算法,可以在最多1.5n的比較中找到高值和低值。查找最多1.5n比較的高/低數字的算法
我的第一次嘗試是
int high=0
int low= Number.MaxValue //problem statement is unclear on what type of number to use
Number numList[0 . . n] //number array, assuming unsorted
for (i=0, i < n, i++) {
if (numList[i] > high)
high = numList[i]
else if (numList[i] < low)
low = numList[i]
}
我的問題是在每次循環有以下三種可能性:
- 低價值發現 - 1相比是
- 高價值發現 - 進行了2次比較
- 均未找到 - 進行了2次比較
因此,對於整個數組遍歷,最多可以進行2n次比較,這與1.5n比較的最大問題的要求相差甚遠。
在這類問題中,最好的起始值是第一個元素。 – wildplasser
@wildplasser,你的意思是用第一個元素值初始化高和低? – Jason
是的。這避免了選擇任意{更低,更高}可能的哨兵值。 '空陣列'的情況總是特殊的(它*有*沒有最低,最高) – wildplasser