美文网首页
162. Find Peak Element

162. Find Peak Element

作者: larrymusk | 来源:发表于2017-12-02 14:00 被阅读0次

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

相关文章

网友评论

      本文标题:162. Find Peak Element

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