首页 > 代码库 > 新手算法学习之路----二分法Maximum-in-Mountain-Sequence

新手算法学习之路----二分法Maximum-in-Mountain-Sequence

题目:在一个先升序后降序的数组中找到最大值,如果没找到就返回-1;

         [ 1,4,6,8,6,4,3,2] return 8;

         [10,9,8,7,6,5]   return 10

思路:由于没有像其他数列一样给出一个特定值,这个时候需要一个可以用找到中间值M1 和M1+1进行判断,如果[M1] >[M1+1],就可以判断此时M1和M1+1在降序上;如果[M1]<[M1+1]说明M1 和 M1+1在升序上。

代码:

int SearchMaximum(int []arry){
        int start = 0, end = arry.length-1,mid;
        if(arry.length==0||arry==null) return -1;
        while(start+1<end){
            mid=start+(end-start)/2;
            if(arry[mid]>=arry[mid+1]){
                end = mid;
            }else {
                start =mid;
            }
        }
        return Math.max(arry[end], arry[start]);
    }

 

新手算法学习之路----二分法Maximum-in-Mountain-Sequence