灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3525回复:0

《算法设计》求单峰数组

楼主#
更多 发布于:2012-10-19 12:23

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

    }

}


喜欢0 评分0
游客

返回顶部