162. Find Peak Element

/*
第一个数和最后一个数都小于其相邻数,所以数组一定存在峰值。考虑使用二分
法,取中间值后有以下几种情况:
中间值比其右边数小,说明其处在上升沿中,峰值在其右侧, start = mid

中间值比其左边数小,说明其处在下降沿中,峰值在其左侧, end = mid

(中间值比两边都小,那么左侧和右侧都有峰值,舍弃哪边都可以。)
中间值比两边的数都大,是峰值,直接返回即可。

*/

int findPeakElement(int* nums, int numsSize) {
    int start = 0;
    int end = numsSize-1;
    int mid;
    while(start+1 < end){
        mid = start+(end - start)/2;
        
        if(nums[mid] < nums[mid+1])
            start = mid;
        else if(nums[mid] < nums[mid-1])
            end = mid;
        else
            end = mid;
    }
    
    if(nums[start] > nums[end])
        return start;
    else
        return end;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • A peak element is an element that is greater than its nei...
    ShutLove阅读 192评论 0 0
  • A peak element is an element that is greater than its nei...
    exialym阅读 167评论 0 0
  • 原题 你给出一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的A[0] < A[1] 并且 A[...
    Jason_Yuan阅读 668评论 0 1
  • 1. 断点打在宏上 问题:今天同事被一个宏给坑了,一个方法打断点时走了两次,log输出一次。 解释:这个宏比较复杂...
    liyc_dev阅读 208评论 0 0
  • 并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时...
    zlb阅读 438评论 0 0