我一直在考虑这个作业问题。给定一个大小为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