美文网首页
先递增后递减的数组中找最值

先递增后递减的数组中找最值

作者: analanxingde | 来源:发表于2018-04-02 10:12 被阅读99次

    问题分析

    最小值

    先增后减的数组,最小值一定是首尾元素中较小的那个

    最大值

    (1)如果数组先增大再减小,峰值就是最大值。
    (2)如果数组单调递增,最后一个元素就是最大值。
    (3)如果数组单调递减,第一个元素就是最大值。
    (4)如果数组全部都一样,任何一个元素都是答案,更极端地,如果数组只有一个元素,那么这唯一的元素就是答案。

    最大值代码

    int FindMax(int *A, int m)
    {
        if(m == 0) return -1;            //如果数组大小为0,则返回错误
        int begin = 0;
        int end = m - 1;
        int MP =  (begin + end)/2;
        
        while(MP > 0 && MP < m -1)
        {
            if(A[MP] > A[MP+1] && A[MP] > A[MP-1]){  //如果符合条件就返回此值
                       return MP;        
              }else if (A[MP] < A[MP+1]){            //在递增段
                    begin = MP+ 1;
                    MP= begin + (end - begin)/2;
              }else{                                 //在递减段
                    end = MP- 1;
                    MP= begin + (end - begin)/2;
              }
        }
        
        if(MP == 0) return 0; //如果数组是完全递减的,则第一个值就是最大值
        if(MP == m-1) return m-1; //如果数组是完全递增的,则最后一个值为最大值
        return -1;
    }
    

    相关文章

      网友评论

          本文标题:先递增后递减的数组中找最值

          本文链接:https://www.haomeiwen.com/subject/iljthftx.html