zl程序教程

您现在的位置是:首页 >  后端

当前栏目

《算法设计》求单峰数组

算法数组 设计
2023-09-11 14:19:04 时间

这是算法设计书地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));
    }
}