leetcode刷题题解——162. 寻找峰值

寻找峰值

要求:
在这里插入图片描述
思路:

  1. 由于时间负责度需要是O( log ⁡ n \log_n logn),所以选择了分治法进行查找
  2. 由于给出的函数形式不满足递归的需求,创建新函数
  3. 递归函数,判断递归截止条件:l>r
  4. 对中间索引的值进行条件判断,
    • 符合峰值条件,返回索引
    • 否则,递归调用左边区间,并将返回值存储在target中,使用三目运算符决定返回值,如果左边区间返回值为-1,那么右边返回值决定了是否有峰值:为-1,则左右均为-1,无峰值;否则,峰值出现在右边区间,返回即可。如果左边区间不为-1,那么直接返回该峰值对应索引即可。
  5. 递归结束
class Solution {
   public int findPeakElement(int[] nums) {
        if (nums.length<=1) return 0;
        return findPeakElement(nums,0,nums.length-1);
    }

    private int findPeakElement(int[] nums,int l,int r) {
        if (l>r) return -1;
        int mid = (l+r)>>1;
        if (mid==0&&nums[mid]>nums[1]) return mid;
        else if (mid==nums.length-1&&nums[mid]>nums[mid-1]) return mid;
        else if (mid>0&&mid<nums.length-1&&nums[mid]>nums[mid-1]&&nums[mid]>nums[mid+1]) return mid;
        else {
            int target = findPeakElement(nums,l,mid-1);
            return target!=-1?target:findPeakElement(nums,mid+1,r);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿豆蛙给生活加点甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值