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

问题分析

最小值

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

最大值

(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;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 5,160评论 0赞 0
  • 9.3.3 快速排序   快速排序将原数组划分为两个子数组,第一个子数组中元素小于等于某个边界值,第二个子数组中的...
    RichardJieChen阅读 2,026评论 0赞 3
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,351评论 1赞 92
  • 我是46号,以下是对45号和48号战友的个人商业画布的点评。 @45个人商业画布 您的个人商业模式很好,两个基本问...
    博学于文约之以礼阅读 284评论 0赞 1
  • ​我时常对自己说,要有多坚强?才能念念不忘,怀念之所以难过,是因为不能得到,不能拥有,有的时候,甚至会觉得,就连想...
    再也不是宝宝了阅读 364评论 0赞 0

友情链接更多精彩内容