参考资料:左程云算法课文章来源:https://www.toymoban.com/news/detail-464646.html
思路:二分法
首先判断左右两端点是否是峰值,
如果是,则返回其下标,并结束;如果不是,说明左右两端点都小,峰值必然在余下(中间部分)取到,则用二分法检查nums[1…n-2]。
具体地,找中间位置的数,看他是不是峰值,如果不是,那么可以通过它和其邻居的大小判断,下次应该去哪一侧做检查。文章来源地址https://www.toymoban.com/news/detail-464646.html
public int findPeakElement(int[] arr){
int n = arr.length;
if(n<2)
{
return 0;
}
if(arr[0]>arr[1])
{
return 0;
}
if(arr[n-2]<arr[n-1])
{
return n-1;
}
int l = 1;
int r=n-2;
int m=0;
while(l<=r)
{
m = ((r+l)>>1);
if(arr[m]>arr[m-1] && arr[m]>arr[m+1])
{
return m;
}else if(arr[m-1]>=arr[m])
{
r = m-1;
}else{
l = m+1;
}
}
return l;
}
到了这里,关于leetCode 162 !Find peak Element的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!