// 时间复杂度o(logn),空间复杂度o(1)
// 思想:上坡一定有波峰,下坡不一定有波峰,但是可能找不到,一直向下走的。
// 因为,nums[-1] = nums[n] = -∞
// 最左边和最右边为无穷小,当任意一个位置i上的值小于相邻i+1时,则左边必然存在峰值
function findPeakElement( nums,len = nums.length ) {
let peakIndx = -1;
peakIndx = binarySearch(0,len - 1);
function binarySearch(left,right){
const mid = Math.floor((left + right)/2);
if(left === right){
return mid;
}
//判断mid右边是不是向上区间
if(nums[mid+1] > nums[mid]) {
//右边是右向上区间,
// mid不可能是峰值 所以+1,继续+1收缩找到上区间的分界线和下区间
left = mid + 1;
}else{
// 如果右边是向下区间就往左收缩
//不-1是因为mid可能是峰值,
// 收缩之后如果left === right就是mid就是峰值
right = mid;
}
return binarySearch(left,right);
}
return peakIndx;
}
module.exports = {
findPeakElement : findPeakElement
};