求数组的最大值

问题描述:给定一个数组,数组中最大值的前面数字递增,后面连续递减,求最大值,

eg: 1,2,3,4,8,6,5,4,3  中的最大值为8

算法描述:采用二分法,获取中间值,然后和他的前面一个比,如果比前面数字大,说明最大值在后面,缩小查找范围,如果比后面一个大,说明最大值在前面,缩小查找范围;

代码如下:

public static void main(String[] args) throws Exception{
    int[] array = new int[9];
    array[0] = 1;
    array[1] = 2;
    array[2] = 7;
    array[3] = 8;
    array[4] = 9;
    array[5] = 10;
    array[6] = 11;
    array[7] = 3;
    array[8] = 2;
    sort(array);
}

public static void sort(int[] array){
    int start = 0;
    int end = array.length - 1;
    int mid;
    while(start < end){
        mid = (start + end)/2;
        //如果就剩下最后俩个数字的时候,俩个数字中有一个肯定是最大值,直接比较即可
        if(start == mid || end == mid){
            System.out.println(array[end] > array[start] ? array[end] : array[start]);
            return;
        }
        if(array[mid] > array[mid + 1]){
            end = mid;
        } else if(array[mid] < array[mid + 1]){
            start = mid;
        } else if(array[mid] > array[mid - 1]){
            start = mid;
        } else if(array[mid] < array[mid-1]){
            end = mid;
        }
    }
    System.out.println(array);
}

猜你喜欢

转载自blog.csdn.net/junglerofchina/article/details/79861264
今日推荐