《算法设计》求单峰数组
![]() | ![]() | |
![]() | 这是算法设计书地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)); } }
| |
![]() | ![]() |