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