leetCode 162 !Find peak Element

参考资料:左程云算法课

思路:二分法
首先判断左右两端点是否是峰值,
如果是,则返回其下标,并结束;如果不是,说明左右两端点都小,峰值必然在余下(中间部分)取到,则用二分法检查nums[1…n-2]。
具体地,找中间位置的数,看他是不是峰值,如果不是,那么可以通过它和其邻居的大小判断,下次应该去哪一侧做检查。

   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;
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值