这是算法设计书地171页上的题:假设有n个项的数组A,数组的每个元素都不相同,该数组序列是单峰的:对于某个在0与n-1之间的下标p,
数组项的值增加直到A中的位置p,然后剩下的元素减少直到位置n,
要求:尽量读很少的元素,就是找到这个顶峰元素p在哪一个位置,下面是具体的递归实现
[java]
ublic class FindMaxIndex {
public static int findMaxIndex(int arr[], int begin, int end) {
int center = (begin + end) / 2;
//如果中间元素处于上坡的位置
if (arr[center] > arr[center - 1] ;; arr[center] < arr[center + 1]) {
begin = center + 1;
return findMaxIndex(arr, begin, end);
}//如果处于下坡的位置
else if (arr[center] < arr[center - 1] ;; arr[center] > arr[center + 1]) {
end = center -1;
return findMaxIndex(arr, begin, end);
} else {//此种情况是当arr[center-1]<arr[center]<arr[center+1]因为此数组是单峰数组,
return center;
}
}
public static void main(String[] args) {
int arr[] = {1, 2, 3, 5,6, 7, 8,9,10,4, 3, 2, 1};
System.out.println(FindMaxIndex.findMaxIndex(arr, 0, arr.length));
}
}