《算法设计》求单峰数组

来源:互联网 发布:协议数据单元组成 编辑:程序博客网 时间:2024/05/17 04:05

这是算法设计书地171页上的题:假设有n个项的数组A,数组的每个元素都不相同,该数组序列是单峰的:对于某个在0与n-1之间的下标p,

数组项的值增加直到A中的位置p,然后剩下的元素减少直到位置n,

要求:尽量读很少的元素,就是找到这个顶峰元素p在哪一个位置,下面是具体的递归实现

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));    }}


 

原创粉丝点击